В TypeScript существуют обычные перечисления (enum) и константные перечисления — const enum. Главное отличие заключается в том, как работает код после компиляции.
При использовании const enum, TypeScript полностью удаляет объявление перечисления из итогового JavaScript-кода. Вместо создания объекта, компилятор находит все места использования enum и подставляет туда конкретные числовые значения (инлайнинг). Это делает итоговый код меньше и быстрее.
Синтаксис прост: добавьте ключевое слово const перед объявлением.
const enum Directions {
Up,
Down
}
Этот интерактивный урок поможет вам понять особенности оптимизации и ограничения, которые накладывают константные перечисления, через практические примеры и тесты.
- Модуль 1: Введение в TypeScript
- Модуль 2: Примитивные типы
- Модуль 3: Специальные типы
- Модуль 4: Массивы
- Модуль 5: Кортежи (Tuples)
- Модуль 6: Объекты
- Модуль 7: Функции
- Модуль 8: Union типы
- Модуль 9: Литеральные типы
- Модуль 10: Type Aliases
- Модуль 11: Интерфейсы
- Модуль 12: Type Guards и Narrowing
- Модуль 13: Enums
- Модуль 14: Классы
- Модуль 15: Generics — основы
- Модуль 16: Generics — ограничения
- Модуль 17: Utility Types — базовые
- Модуль 18: Utility Types — работа с Union
- Модуль 19: Utility Types — функции
- Модуль 20: Type Assertions
- Модуль 21: Keyof и Typeof операторы
- Модуль 22: Mapped Types
- Модуль 23: Conditional Types
- Модуль 24: Discriminated Unions
- Модуль 25: Модули и типы
- Модуль 26: Declaration Files
- Модуль 27: Типизация асинхронного кода
- Модуль 28: Практические паттерны
1. Объявление const enum
В TypeScript для оптимизации производительности можно использовать const enum, которые полностью удаляются во время компиляции и заменяются значениями. В данном фрагменте кода объявлено перечисление, но отсутствует ключевое слово, которое превращает его в const enum. Вставьте пропущенное ключевое слово перед enum, чтобы код соответствовал лучшим практикам оптимизации.
input1S enum Direction {
Up = 1,
Down,
Left,
Right
}
const move: Direction = Direction.Up;2. Результат компиляции
В TypeScript const enum не создаёт объект во время выполнения, а значения его элементов подставляются непосредственно в местах использования. Рассмотрите приведённый код и выберите, во что превратится обращение к элементу const enum после компиляции в JavaScript. Обратите внимание на числовые значения элементов перечисления.
const enum StatusCode {
OK = 200,
BadRequest = 400,
NotFound = 404,
InternalServerError = 500
}
let errorCode = StatusCode.NotFound;3. Ограничения const enum
В данном фрагменте кода TypeScript используется const enum, но затем предпринимается попытка обратного маппинга (получения имени по числовому значению). Однако const enum полностью удаляется во время компиляции и не создаёт объект во время выполнения, поэтому обратный маппинг для него невозможен. Найдите и исправьте ошибку, чтобы код стал рабочим и вывел имя направления.
const enum Direction { Up = 1, Down, Left, Right} let name = Direction[1];4. Сборка структуры
Из предложенных строк соберите корректную 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);5. Выбор типа перечисления
В данном задании вам предстоит выбрать подходящий тип перечисления (enum или const enum) для заданного контекста. В коде TypeScript есть два пропуска: в первом нужно указать тип перечисления, а во втором — значение, которое будет присвоено переменной. Обратите внимание на комментарии в коде, которые указывают на требования к перечислению (например, необходимость существования объекта во время выполнения или только для типизации). Выберите правильные варианты из выпадающего списка, чтобы код работал корректно и соответствовал описанию.
// Нужно перечисление, которое будет существовать в скомпилированном JavaScript
input1S Status {
Active = 1,
Inactive,
Pending
}
// Используем перечисление
let currentStatus: Status = input2S;
console.log(currentStatus); // Должно вывести 16. Enum vs Const Enum
Перед вами список утверждений, описывающих особенности и поведение перечислений (Enums) в TypeScript. Распределите каждое утверждение по одной из двух категорий: 'Обычный Enum' или 'Const Enum'. Утверждения касаются генерации кода во время компиляции, поддержки обратного маппинга и производительности. Обратите внимание, что обычные Enum генерируют реальные объекты в скомпилированном JavaScript, а Const Enum полностью удаляются и заменяются на константные значения.