Typescript проверка значения на соответствие типу(string literal type)

published 02 December 2020

Когда хочется использовать литеральные типы(string literal types) вместо перечислений(enum), встает вопрос как проверить значение на соответствие типу в рантайме.

С версии Typescript 3.4 это сделать довольно просто.

  1. Объявляем массив с типами:
const typeList = ['type1', 'type2', 'type3'] as const;
  • as const запрет на изменение объекта
  1. Делаем типы на основе массива
type MyType = typeof typeList[number];

синтаксис

typeof typeList[number]

обозначает, что типами будут все значения массива, можно сделать тип только из одного значения

typeof typeList[1]
  1. теперь мы можем спокойно делать проверку на соответствие типа, без лишних движений:
typeList.includes(myValue);