Enum позволяет создать набор числовых значений с собственным именем у каждого элемента. Создаются перечисления с использованием ключевого слова enum
. В теле перечисления может содержаться ноль и больше элементов:
enum Directions {
North = 1,
South, // 2
West = 777,
East // 778
}
let direction: Directions = Directions.South;
console.log(direction); // 2
console.log(Directions[direction]); // South
move(direction);
Числовые значения для элементов перечисления создаются автоматически по порядку, начиная с нуля. Но можно задать начальное, некоторые или все значения самостоятельно. Приведенное выше перечисление будет транспилировано в следующий JavaScript код:
var Directions;
(function (Directions) {
Directions[Directions["North"] = 1] = "North";
Directions[Directions["South"] = 2] = "South";
Directions[Directions["West"] = 777] = "West";
Directions[Directions["East"] = 778] = "East";
})(Directions || (Directions = {}));
Перечисление представляет собой объект, в котором хранится как прямое отображение "ключ-значение", так и обратное "значение-ключ".
Можно добиться уменьшения транспилированного JS кода, если использовать константные перечисления. Для этого перед enum
нужно написать const
:
const enum Directions {
North,
South,
West,
East
}
let direction: Directions = Directions.South;
Этот код будет транспилирован в JS как:
var direction = 1 /* South */;
Т.е. в процессе компиляции выполнится замена элементов перечислений на их константные значения. Но тут есть обратная сторона. Использовать обращения к перечислению с целью получить значение по ключу не выйдет, ибо объект-перечисление в памяти не находится:
console.log(Directions[direction]); // Ошибка!
Элемент константного перечисления доступен только с использованием строкового литерала.