#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.