# Перечисления в 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); // 'Лето'`

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

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

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

←→
↑