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

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

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

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

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

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

<keyof SomeInterface>'one1';

Спасибо.

9 ответов

18 просмотров

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

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

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

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

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
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта