TypeScript проверяет тип соответствия строки

#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