Enums в TypeScript
Enum (перечисление) — это особый вид «класса», который содержит группу констант, то есть значений, которые нельзя изменить.
Перечисления бывают двух видов: строковые (string) и числовые (numeric).
Начнём с числовых перечислений.
Числовые enums — по умолчанию
По умолчанию перечисление присваивает первому члену значение 0 и прибавляет 1 для каждого следующего члена.
Пример
North равен 0, East равен 1 и так далее. Присваивание обычной строки 'North' переменной типа перечисления — это ошибка компиляции: допустимыми значениями являются только члены перечисления.
CardinalDirections с членами North, East, South, West (без явных значений), присвойте CardinalDirections.North переменной и выведите её в консоль (0), затем присвойте той же переменной строку 'North', чтобы компилятор сообщил, что строка не может быть присвоена типу перечисления.
Вывод: программа на TypeScript и захваченный вывод
enum CardinalDirections {
North,
East,
South,
West
}
let currentDirection = CardinalDirections.North;
// выводит 0
console.log(currentDirection);
// вызывает ошибку, так как 'North' не является допустимым значением перечисления
currentDirection = 'North'; // Ошибка: "North" не может быть присвоено типу 'CardinalDirections'.
Числовые enums — с начальным значением
Первому члену можно задать начальное значение. Тогда следующие члены автоматически продолжают отсчёт от него.
Пример
North задан как 1, поэтому East становится 2, South — 3, а West — 4.
CardinalDirections, в котором North задан как 1, а East, South, West не имеют явных значений, затем выведите CardinalDirections.North (1) и CardinalDirections.West (4).
Вывод: программа на TypeScript и захваченный вывод
enum CardinalDirections {
North = 1,
East,
South,
West
}
// выводит 1
console.log(CardinalDirections.North);
// выводит 4
console.log(CardinalDirections.West);
Числовые enums — со всеми заданными значениями
Можно также задать каждому члену своё уникальное число.
В этом случае ни одно значение не увеличивается автоматически — каждый член сохраняет ровно то число, которое вы написали.
Пример
Каждый код состояния HTTP записан явно, поэтому StatusCodes.NotFound равен 404, а StatusCodes.Success равен 200.
StatusCodes с NotFound = 404, Success = 200, Accepted = 202 и BadRequest = 400, затем выведите StatusCodes.NotFound (404) и StatusCodes.Success (200).
Вывод: программа на TypeScript и захваченный вывод
enum StatusCodes {
NotFound = 404,
Success = 200,
Accepted = 202,
BadRequest = 400
}
// выводит 404
console.log(StatusCodes.NotFound);
// выводит 200
console.log(StatusCodes.Success);
Строковые enums
Перечисления могут содержать и строковые (string) значения.
Строковые перечисления встречаются чаще числовых, потому что их значения легче читать и они яснее выражают намерение.
Примечание: технически в одном перечислении можно смешивать строковые и числовые значения, но так делать не рекомендуется.
Пример
Каждому члену задано строковое значение, поэтому вывод CardinalDirections.North печатает текст North, а не число.
CardinalDirections, в котором North, East, South и West заданы своими собственными именами в виде строк, затем выведите CardinalDirections.North («North») и CardinalDirections.West («West»).
Вывод: программа на TypeScript и захваченный вывод
enum CardinalDirections {
North = 'North',
East = "East",
South = "South",
West = "West"
};
// выводит "North"
console.log(CardinalDirections.North);
// выводит "West"
console.log(CardinalDirections.West);