Название фичи: Enums(Перечисления)

Описание:

Перечисления - это действительные объекты, существующие во время выполнения, которые позволяют определить набор именованных числовых констант.

Аналог в c# / js: Enumerable

Детали:

Тело перечисления состоит из нуля или более элементов. Элементы имеют численное значение ассоциированное с именем, которое может быть константой / вычислено.
Элемент считается константой, если:

  • Отсутствие инициализатора, а предшествующий элемент перечисления был константой (значение будет равняться значению предшествующего элемента перечисления плюс единица. Исключение - первый элемент перечисления)
  • Инициализирован с константным выражением перечисления (то есть, с подмножеством TS выражений, которое может быть полностью вычислено во время компиляции: численным литералом; константным выражением перечисления, взятым в круглые скобки; унарным / бинарным оператором; ссылка к прежде определённому константному элементу перечисления)

В остальных случаях, считается, что элемент вычисляем.

Разновидности перечислений:

  • Обычные перечисления
  • Константные перечисления - используют только константные выражения перечисления, и в отличие от обычных полностью удаляются в течение компиляции. Элементы встраиваются в местах использования.
  • Окружающие перечисления - используются для описания формы уже существующих перечислений, отличаются тем, что для элемента не константного окружающего перечисления, у которого нет инициализатора, элемент считается вычисляемым (не константным).

Перечисления совместимы с числами, и наоборот. Значения из различных перечислений считаются несовместимыми друг с другом.

Решаемая проблема:
СМ Конспект

Пример возникновения:

При создании парсера, который перебирает каждый символ строки , необходимо сравнить текущий символ с чем-либо. В JavaScript разработчику пришлось бы инициализировать целый список переменных.

Как решить проблему:

Используя enumразработчику становятся доступными конструкции вида:

if (node.type === NodeType.OpenParetheses) {...}

Простое и прозрачное использование типов, которые подвергаются строгой проверке компилятором.

Синтаксис
:

enum Color {
    Red = 1, 
    Green = 2, 
    Blue = 4
};

let c: Color = Color.Green;

//совместимость типов
enum Status { Ready, Waiting };
enum Color { Red, Blue, Green };

let status = Status.Ready;
status = Color.Green;  // ошибка несовместимости перечислений

Перекомпилированный в JS код:

var Color;

(function (Color) {

Color[Color["Red"] = 1] = "Red";

Color[Color["Green"] = 2] = "Green";

Color[Color["Blue"] = 4] = "Blue";

})(Color || (Color = {}));

var c = Color.Green;


var Status;
(function (Status) {
    Status[Status["Ready"] = 0] = "Ready";
    Status[Status["Waiting"] = 1] = "Waiting";
})(Status || (Status = {}));
;
var Color;
(function (Color) {
    Color[Color["Red"] = 0] = "Red";
    Color[Color["Blue"] = 1] = "Blue";
    Color[Color["Green"] = 2] = "Green";
})(Color || (Color = {}));
;
var status = Status.Ready;
status = Color.Green;

results matching ""

    No results matching ""