из ключей интерфейса объединенных по принципу "OR".
Т.е.
interface SomeInterface {
one: string;
two: string;
three: string;
}
как вот из этого получить, вот это?
type SomeType = 'one' | 'two' | 'three'?
Думаю в сторону keyof, но вот такая конструкция почему-то не работает
<keyof SomeInterface>'one1';
Спасибо.
Так? https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgMoHsC2ECS5rxLIDeAsAFDLLogQBcyAzmFKAOYDcFVYA7ug2asQnbsjAALKBHpMW7LuQC+FCmACeABxQZseSLEQQA0hHWNkAXmQBrM+hhosufIaSLV5IA
Я скорее хочу добиться чтобы TS ругался когда я передаю в ф-цию строку не равную одному из ключей интерфейса Вот пример https://www.typescriptlang.org/play?jsx=0#code/JYOwLgpgTgZghgYwgAgMoHsC2ECS5rxLIDeAsAFDLLogQBcyAzmFKAOYDcFVYA7ug2asQnbsjAALKBHpMW7LuQC+FCmACeABxQZseSLEQQA0hHWNkAXmQBrM+hhosufIaSKKMAK4gEYYDTIcMgAFABucAA2gvIiAJQkYgg0jOiREAB0kehsIXBxiirkFHAhADx26g5Oeq6EEAB8AOQ0EE0FQA
Думаю так https://www.typescriptlang.org/play?jsx=0#code/JYOwLgpgTgZghgYwgAgMoHsC2ECS5rxLIDeAsAFDLLogQBcyAzmFKAOYDcFVYA7ug2asQnbsjAALKBHpMW7LuQC+FCmACeABxQZseSLEQQA0hHWNkAXmQBrM+hhosufIaSKKMAK4gEYYDTIcMgAFABucAA2DLouBoQmZowAlCRiCDSM6JEQAHSR6GzhUcmKKuQUcCEA5DQQ1aWVNdBQ6FANHEA
Ну так то понятно, но в моем случае я вызываю метод из API который может принимать любую строку. И валидировать мне нужно именно в момент вызова.
Тут, как я понимаю, нужен Type Guard, про который мне недавно подсказывали. Кажется это был @thisqualifier
не надо путать статичную типизацию с рантайм проверкой, если нужна вторая - проверяй ключи ручками
Это не совсем рантайм, я же хотел чтобы провекра выполнялась на этапе компиляции. Ну да ладно. Мне проще будет запилить enum с возможными значениями. Спасибо)
Можно просто написать более типизированную обёртку над функцией, если так
Спасибо, я пришел к выводу что реализовать задуманное возможно, но слишком много действия для одного маленького кейса который легко обойти более простым путем. По этому вопрос снимаю. Всем спасибо за содействие.
Обсуждают сегодня