Typescript — требуется одно буквенное значение в массиве N-длины

#typescript

#typescript

Вопрос:

Возможно ли следующее? Я хочу потребовать литерал foo, но разрешить массиву иметь любую форму (т. Е. Я не могу использовать кортеж длиной X с заранее определенными позициями)

 type requireFoo = ???

const works: requireFoo = ['bar','foo'] //Should work
const notWork: requireFoo = ['tar', 'bar'] //Should not work

 

Вот шаблон игровой площадки

Комментарии:

1. Если есть конкретная проблема, которую вы пытаетесь решить, вы можете опубликовать ее в виде вопроса, чтобы мы могли предоставить более эргономичное решение, изменив как javascript, так и типизацию.

Ответ №1:

Это странное требование. Если вам требуется, чтобы foo встречается в конце или начале кортежа, вы можете сделать это:

 type requireFoo = [...any[], 'foo']

const works: requireFoo = ['bar', 'foo' as const] // Good 
const notWork: requireFoo = ['tar', 'bar' as const] // Bad 
 

примечание: аргументы Rest в начале кортежа, как показано выше, доступны только в бета-версии typscript 4.2.