const Enums

Тренажер по TypeScript для пользователей с начальным уровнем подготовки.

Тренажер по TypeScript

В TypeScript существуют обычные перечисления (enum) и константные перечисления — const enum. Главное отличие заключается в том, как работает код после компиляции.

При использовании const enum, TypeScript полностью удаляет объявление перечисления из итогового JavaScript-кода. Вместо создания объекта, компилятор находит все места использования enum и подставляет туда конкретные числовые значения (инлайнинг). Это делает итоговый код меньше и быстрее.

Синтаксис прост: добавьте ключевое слово const перед объявлением.

const enum Directions {
Up,
Down
}

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

Список тем

1. Объявление const enum

id: 40696_ce_01_syntax

В TypeScript для оптимизации производительности можно использовать const enum, которые полностью удаляются во время компиляции и заменяются значениями. В данном фрагменте кода объявлено перечисление, но отсутствует ключевое слово, которое превращает его в const enum. Вставьте пропущенное ключевое слово перед enum, чтобы код соответствовал лучшим практикам оптимизации.

Заполните пропуски
input1S enum Direction {
  Up = 1,
  Down,
  Left,
  Right
}

const move: Direction = Direction.Up;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Результат компиляции

id: 40696_ce_02_predict

В TypeScript const enum не создаёт объект во время выполнения, а значения его элементов подставляются непосредственно в местах использования. Рассмотрите приведённый код и выберите, во что превратится обращение к элементу const enum после компиляции в JavaScript. Обратите внимание на числовые значения элементов перечисления.

Выберите правильный вариант ответа
const enum StatusCode {
    OK = 200,
    BadRequest = 400,
    NotFound = 404,
    InternalServerError = 500
}

let errorCode = StatusCode.NotFound;
Сообщения
Проверить
Показать подсказку

3. Ограничения const enum

id: 40696_ce_03_error

В данном фрагменте кода TypeScript используется const enum, но затем предпринимается попытка обратного маппинга (получения имени по числовому значению). Однако const enum полностью удаляется во время компиляции и не создаёт объект во время выполнения, поэтому обратный маппинг для него невозможен. Найдите и исправьте ошибку, чтобы код стал рабочим и вывел имя направления.

Найдите ошибку и исправьте
const enum Direction {
    Up = 1,
    Down,
    Left,
    Right
}
 
let name = Direction[1];
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Сборка структуры

id: 40696_ce_04_build

Из предложенных строк соберите корректную TypeScript-программу, которая объявляет const enum с двумя значениями, а затем использует его в функции для вывода одного из значений. Порядок значений внутри enum не важен, но объявление enum должно идти до его использования. Игнорируйте лишние строки, не входящие в решение.

Перетяните в правильном порядке строки из одного блока в другой
const enum Status {
  Active = "ACTIVE",
  Inactive = "INACTIVE"
}
function logStatus(status: Status) {
  console.log(status);
}
logStatus(Status.Active);
const enum Color { Red = "RED", Blue = "BLUE" }
logStatus(Status.Inactive);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Выбор типа перечисления

id: 40696_ce_05_select

В данном задании вам предстоит выбрать подходящий тип перечисления (enum или const enum) для заданного контекста. В коде TypeScript есть два пропуска: в первом нужно указать тип перечисления, а во втором — значение, которое будет присвоено переменной. Обратите внимание на комментарии в коде, которые указывают на требования к перечислению (например, необходимость существования объекта во время выполнения или только для типизации). Выберите правильные варианты из выпадающего списка, чтобы код работал корректно и соответствовал описанию.

Нужно правильно расставить в пропуски предложенные варианты
// Нужно перечисление, которое будет существовать в скомпилированном JavaScript
input1S Status {
  Active = 1,
  Inactive,
  Pending
}

// Используем перечисление
let currentStatus: Status = input2S;
console.log(currentStatus); // Должно вывести 1
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Enum vs Const Enum

id: 40696_ce_06_sort

Перед вами список утверждений, описывающих особенности и поведение перечислений (Enums) в TypeScript. Распределите каждое утверждение по одной из двух категорий: 'Обычный Enum' или 'Const Enum'. Утверждения касаются генерации кода во время компиляции, поддержки обратного маппинга и производительности. Обратите внимание, что обычные Enum генерируют реальные объекты в скомпилированном JavaScript, а Const Enum полностью удаляются и заменяются на константные значения.

Перетяните элементы в соответствующие блоки
Обычный Enum
Const Enum
При компиляции генерирует JavaScript объект, который существует во время выполнения.
Не генерирует JavaScript код, а заменяет использование enum на соответствующие значения.
Поддерживает обратный маппинг (по значению можно получить ключ).
Не поддерживает обратный маппинг.
Может использоваться в вычисляемых и невычисляемых членах.
Может использоваться только в константных выражениях.
Сообщения
Проверить
Показать подсказку

TypeScript: компиляция и запуск

id: 40696_compiler

Узнайте, как `const enum` помогает сделать ваш код быстрее и легче, подставляя значения напрямую в места использования. Попробуйте изменить уровни сложности в примере, добавьте новые элементы в перечисление и создайте функцию, которая распределяет награды в зависимости от выбора игрока. Экспериментируйте с типами значений: что если заменить числа на строки? Обратите внимание: `const enum` полностью удаляется при компиляции, поэтому обратное получение имени по значению здесь невозможно — попробуйте раскомментировать запрещенный код и убедиться в этом сами!

TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру