Не проверяет тип, если он задан через enum?

В TypeScript, если тип переменной задан через enum, то при компиляции кода тип проверяется, и компилятор TypeScript не допустит присваивание значения, которое не соответствует значению в enum.

enum в TypeScript представляет собой набор именованных числовых констант. Обычно его используют для определения набора возможных значений для переменной или свойства. Например, следующая конструкция определяет enum с именами дней недели:

enum DaysOfWeek {
  Monday,
  Tuesday,
  Wednesday,
  Thursday,
  Friday,
  Saturday,
  Sunday
}

Каждому имени enum ставится в соответствие числовое значение. По умолчанию, начиная с 0 и продолжая последовательность по порядку.

console.log(DaysOfWeek.Monday); // 0
console.log(DaysOfWeek.Tuesday); // 1

Когда мы объявляем переменную с типом enum, компилятор TypeScript гарантирует, что значение переменной будет соответствовать одному из значений из enum. Если мы попытаемся присвоить переменной значение, которое не является значением enum, компилятор выдаст ошибку.

let today: DaysOfWeek = DaysOfWeek.Monday;
today = 5; // Ошибка компиляции: Type '5' is not assignable to type 'DaysOfWeek'

Компилятор TypeScript позволяет также явно указывать числовые значения для каждого элемента enum. Это может быть полезно, если необходимо явно указать конкретные значения или иметь нестандартную последовательность чисел.

enum DaysOfWeek {
  Monday = 1,
  Tuesday = 5,
  Wednesday = 8
}

console.log(DaysOfWeek.Monday); // 1
console.log(DaysOfWeek.Tuesday); // 5

Таким образом, компилятор TypeScript осуществляет проверку типов, включая enum, и не допускает присваивание значений, которые не соответствуют определенным значениям в enum. Это помогает предотвратить ошибки во время компиляции и обеспечивает более безопасное программирование.