#typescript
Вопрос:
У меня есть что-то вроде этого:
type UnionType = 'one' | 'two' | 'three'
const myNumber: string = 'just a string'
// function to check if myNumber match UnitionType
Есть ли какой-либо способ сделать это? потому что я не хочу писать:
['one', 'two', 'three'].includes(myNumber)
Комментарии:
1. У вас либо будет это значение во время компиляции, и тогда вы можете просто сделать
const myNumber: UnionType = 'just a string'
то, что не будет компилироваться, либо нет, и тогда вам нужно сделать['one', 'two', 'three'].includes(myNumber)
2. «Я не хочу писать:
['one', 'two', 'three'].includes(myNumber)
» Можете ли вы сформулировать, почему вы не хотите этого делать? Во время выполнения нетUnionType
, поэтому нет способа проверить его с помощью JavaScript. Если вы хотите быть СУХИМ, вы можете выразить тип в терминах массива, но не наоборот. Смотрите Этот код для возможного подхода. Это работает для вас? Если нет, пожалуйста, отредактируйте вопрос, чтобы объяснить, почему он не соответствует вашим вариантам использования. Удачи!
Ответ №1:
Я бы изменил type
на an enum
, тогда вы можете легко провести сравнение с вашей строкой с помощью ключевого in
слова.
enum UnionEnum {
'one',
'two',
'three'
}
const myNumber: string = 'just a string';
// function to check if myNumber match UnitionType
console.log(myNumber in UnionEnum); // Result -> false