Перечисления в TypeScript

Перечисления - это удобный способ создания наборов значений, количество и названия которых известны заранее и не должны изменяться. Для создания перечислений используется ключевое слово enum.

Давайте создадим перечисление, содержащее название пор года:

enum Season { Winter, Spring, Summer, Autumn };

Давайте посмотрим, какие операции можно совершать с перечислениями.

Получение по ключу

Данные в перечислениях можно получать по числовым ключам, подобно элементам массива:

let current: string = Season[0]; console.log(current); // 'Winter'

Получение по значению

А можно по названию элемента получить его ключ:

let current: number = Season.Winter; console.log(current); // 0

Перечисление как тип

Каждое перечисление создает свой собственный тип данных. Давайте для примера для переменной, хранящей текущий сезон присвоим тип Season:

let current: Season;

Запишем в нашу переменную номер сезона:

let current: Season = Season.Winter; console.log(current); // 0

Можно указать номер сезона вручную:

let current: Season = 3;

А вот если попытаться записать данные другого типа, например, строку, то будет ошибка:

let current: Season = 'str'; // будет ошибка

К сожалению, диапазон значений не отслеживается и можно записать номер, отсутствующий в нашем перечислении:

let current: Season = 7; // ошибки не будет

При проверке через оператор typeof наша переменная отдаст числовой тип:

let current: Season = 3; console.log(typeof current); // "number"

Подведя итог можно сказать, что такой тип проверяется не сильно строго и от этого его ценность сомнительна.

Указание номеров

Нумерация номеров не обязательно должна быть с нуля. Можно указать ключи в явном виде следующим образом:

enum Season { Winter = 1, Spring = 2, Summer = 3, Autumn = 4 };

Проверим:

let current: Season = Season.Winter; console.log(current); // выведет 1

Упрощенные ключи

Не обязательно указывать ключи всем элементам. Достаточно указать его первому элементу и ключи следующих элементов будут увеличиваться по порядку. Пример:

enum Season { Winter = 1, Spring, Summer, Autumn };

Проверим:

let current: Season = Season.Summer; console.log(current); // выведет 3

Строковые перечисления

Ключами могут быть не только числа, но и строки:

enum Season { Winter = 'Зима', Spring = 'Весна', Summer = 'Лето', Autumn = 'Осень' };

Проверим:

let current: Season = Season.Summer; console.log(current); // 'Лето'

Практические задачи

Сделайте перечисление с названиями дней недели.

Сделайте перечисление с названиями месяцев.