169 похожих чатов

Всем привет. Друзья, подскажите пожалуйста как я могу получить тип

из ключей интерфейса объединенных по принципу "OR".

Т.е.
interface SomeInterface {
one: string;
two: string;
three: string;
}

как вот из этого получить, вот это?
type SomeType = 'one' | 'two' | 'three'?

Думаю в сторону keyof, но вот такая конструкция почему-то не работает

<keyof SomeInterface>'one1';

Спасибо.

9 ответов

8 просмотров

Так? https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgMoHsC2ECS5rxLIDeAsAFDLLogQBcyAzmFKAOYDcFVYA7ug2asQnbsjAALKBHpMW7LuQC+FCmACeABxQZseSLEQQA0hHWNkAXmQBrM+hhosufIaSLV5IA

Dmitry- Автор вопроса

Я скорее хочу добиться чтобы TS ругался когда я передаю в ф-цию строку не равную одному из ключей интерфейса Вот пример https://www.typescriptlang.org/play?jsx=0#code/JYOwLgpgTgZghgYwgAgMoHsC2ECS5rxLIDeAsAFDLLogQBcyAzmFKAOYDcFVYA7ug2asQnbsjAALKBHpMW7LuQC+FCmACeABxQZseSLEQQA0hHWNkAXmQBrM+hhosufIaSKKMAK4gEYYDTIcMgAFABucAA2gvIiAJQkYgg0jOiREAB0kehsIXBxiirkFHAhADx26g5Oeq6EEAB8AOQ0EE0FQA

Думаю так https://www.typescriptlang.org/play?jsx=0#code/JYOwLgpgTgZghgYwgAgMoHsC2ECS5rxLIDeAsAFDLLogQBcyAzmFKAOYDcFVYA7ug2asQnbsjAALKBHpMW7LuQC+FCmACeABxQZseSLEQQA0hHWNkAXmQBrM+hhosufIaSKKMAK4gEYYDTIcMgAFABucAA2DLouBoQmZowAlCRiCDSM6JEQAHSR6GzhUcmKKuQUcCEA5DQQ1aWVNdBQ6FANHEA

Dmitry- Автор вопроса

Ну так то понятно, но в моем случае я вызываю метод из API который может принимать любую строку. И валидировать мне нужно именно в момент вызова.

Тут, как я понимаю, нужен Type Guard, про который мне недавно подсказывали. Кажется это был @thisqualifier

не надо путать статичную типизацию с рантайм проверкой, если нужна вторая - проверяй ключи ручками

Dmitry- Автор вопроса

Это не совсем рантайм, я же хотел чтобы провекра выполнялась на этапе компиляции. Ну да ладно. Мне проще будет запилить enum с возможными значениями. Спасибо)

Можно просто написать более типизированную обёртку над функцией, если так

Dmitry- Автор вопроса

Спасибо, я пришел к выводу что реализовать задуманное возможно, но слишком много действия для одного маленького кейса который легко обойти более простым путем. По этому вопрос снимаю. Всем спасибо за содействие.

Похожие вопросы

Обсуждают сегодня

/////////////////////////////////////// TChart / TLineSeries - сохранение данных (текстовый файл) /////////////////////////////////////// добрый день / работа с графиком: 1....
livontiy
14
Мне интересно, скорее людей здесь используют D, Rust, C/C++ для решения реальных прикладных задач за деньги?)
Evil Satanson
43
А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
кто поможет крякнуть чит? (реверс инжиринг) чтобы разблокировать премиум версию
Mёdkinson Medvezhkin
39
Чем больше разбираюсь с интерфейсами в дельфи, тем меньше понимаю, как работает поиск имен. type IIntf = interface function GetStr: string; end; IChild = interface(I...
Jack128
9
давайте за механические клавиатуры потрём, мне тут неучтенных денег упало и их можно потратить на что-то такое, вот думаю про dark project kd87a, кто-то имеет что-то подобное?
Oleg Nosov
24
Подскажите, сейчас что то есть (JS модуль какой-нибудь), что можно использовать для: 1) переваривания javascript codа из html fileа, т.е. разбивки, на переменные, команды, бло...
Iar De
15
Вопрос по организации кода. Пилю свой велосипед логгер Есть у меня множество уровней сообщений. Я набрасываю сообщения в стринглист, а когда они нужны, вызываю их через функц...
Serjone
21
Ребя, тут спрашивают, что лучше использовать для юзербота на java? 👀
Mars BATYA [NYА]
12
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Карта сайта