Перейти к основному содержимому

Enums в TypeScript

Enum (перечисление) — это особый вид «класса», который содержит группу констант, то есть значений, которые нельзя изменить.

Перечисления бывают двух видов: строковые (string) и числовые (numeric).

Начнём с числовых перечислений.


Числовые enums — по умолчанию

По умолчанию перечисление присваивает первому члену значение 0 и прибавляет 1 для каждого следующего члена.

Пример

North равен 0, East равен 1 и так далее. Присваивание обычной строки 'North' переменной типа перечисления — это ошибка компиляции: допустимыми значениями являются только члены перечисления.

Prompt
Покажите, что числовое перечисление по умолчанию начинается с 0 и что обычная строка не является допустимым значением перечисления. Объявите перечисление CardinalDirections с членами North, East, South, West (без явных значений), присвойте CardinalDirections.North переменной и выведите её в консоль (0), затем присвойте той же переменной строку 'North', чтобы компилятор сообщил, что строка не может быть присвоена типу перечисления.
Вывод: программа на TypeScript и захваченный вывод

Числовые enums — с начальным значением

Первому члену можно задать начальное значение. Тогда следующие члены автоматически продолжают отсчёт от него.

Пример

North задан как 1, поэтому East становится 2, South — 3, а West — 4.

Prompt
Покажите, что числовое перечисление может начинаться с выбранного значения и дальше продолжать автоматический отсчёт. Объявите перечисление CardinalDirections, в котором North задан как 1, а East, South, West не имеют явных значений, затем выведите CardinalDirections.North (1) и CardinalDirections.West (4).
Вывод: программа на TypeScript и захваченный вывод

Числовые enums — со всеми заданными значениями

Можно также задать каждому члену своё уникальное число.

В этом случае ни одно значение не увеличивается автоматически — каждый член сохраняет ровно то число, которое вы написали.

Пример

Каждый код состояния HTTP записан явно, поэтому StatusCodes.NotFound равен 404, а StatusCodes.Success равен 200.

Prompt
Покажите числовое перечисление, в котором у каждого члена есть своё явное значение, поэтому ничего не увеличивается автоматически. Объявите перечисление StatusCodes с NotFound = 404, Success = 200, Accepted = 202 и BadRequest = 400, затем выведите StatusCodes.NotFound (404) и StatusCodes.Success (200).
Вывод: программа на TypeScript и захваченный вывод

Строковые enums

Перечисления могут содержать и строковые (string) значения.

Строковые перечисления встречаются чаще числовых, потому что их значения легче читать и они яснее выражают намерение.

Примечание: технически в одном перечислении можно смешивать строковые и числовые значения, но так делать не рекомендуется.

Пример

Каждому члену задано строковое значение, поэтому вывод CardinalDirections.North печатает текст North, а не число.

Prompt
Покажите перечисление, члены которого содержат строковые значения вместо чисел. Объявите перечисление CardinalDirections, в котором North, East, South и West заданы своими собственными именами в виде строк, затем выведите CardinalDirections.North («North») и CardinalDirections.West («West»).
Вывод: программа на TypeScript и захваченный вывод