Перечисления - это удобный способ создания
наборов значений, количество и названия которых
известны заранее и не должны изменяться.
Для создания перечислений используется ключевое
слово 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); // 'Лето'
Практические задачи
Сделайте перечисление с названиями дней недели.
Сделайте перечисление с названиями месяцев.