Typescript проверка значения на соответствие типу(string literal type)
Когда хочется использовать литеральные типы(string literal types) вместо перечислений(enum), встает вопрос как проверить значение на соответствие типу в рантайме.
С версии Typescript 3.4 это сделать довольно просто.
- Объявляем массив с типами:
const typeList = ['type1', 'type2', 'type3'] as const;
- as const запрет на изменение объекта
- Делаем типы на основе массива
type MyType = typeof typeList[number];
синтаксис
typeof typeList[number]
обозначает, что типами будут все значения массива, можно сделать тип только из одного значения
typeof typeList[1]
- теперь мы можем спокойно делать проверку на соответствие типа, без лишних движений:
typeList.includes(myValue);