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

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

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

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

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

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

<keyof SomeInterface>'one1';

Спасибо.

9 ответов

21 просмотр

Так? 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- Автор вопроса

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта