> Что такое enum в TypeScript (TypeScript)

Уровень: junior · Роль: frontend · Категория: Технические вопросы

Компании: ООО Премиум ИТ Солюшен, ЛОЦИЯ, LoyaltyLabs

Стек: TypeScript

> Пример ответа

Короткий ответ

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

Подробное объяснение

Enum (перечисление) - это конструкция TypeScript, которая позволяет задать набор именованных констант. По умолчанию enum является числовым: каждому элементу автоматически присваивается числовое значение, начиная с 0. Можно явно задать значения, в том числе строковые.

Основные виды enum:

  • Числовой enum - значения автоматически инкрементируются; можно задать начальное значение.
  • Строковый enum - каждый элемент должен быть инициализирован строкой.
  • Гетерогенный enum - смесь строк и чисел (редко используется).
  • Const enum - полностью инлайнится на этапе компиляции, не создавая объекта в рантайме.

Enum удобны для представления фиксированных наборов значений: статусы, роли, типы событий, направления и т.д. Они улучшают читаемость кода и предотвращают ошибки, связанные с "магическими числами" или строками.

На практике

Enum часто используются для:

  • Определения статусов заказа (pending, approved, rejected)
  • Типов пользовательских ролей (admin, user, guest)
  • Направлений (north, south, east, west)
  • Кодов HTTP-ответов
  • Типов действий в reducer (Redux)

При выборе между enum и union типом (например, type Status = 'pending' | 'approved') стоит учитывать: enum даёт рантайм-значение и возможность итерации, union тип - более лёгкий и предпочтителен, если не нужна обратная связь "ключ-значение".

Пример кода

TYPESCRIPT
// Числовой enum
enum Direction {
Up, // 0
Down, // 1
Left, // 2
Right // 3
}
// Строковый enum
enum Status {
Pending = 'PENDING',
Approved = 'APPROVED',
Rejected = 'REJECTED'
}
// Использование
function move(direction: Direction) {
console.log(`Moving ${Direction[direction]}`);
}
move(Direction.Up); // Moving Up
// Проверка статуса
function handleStatus(status: Status) {
if (status === Status.Approved) {
console.log('Заявка одобрена');
}
}
// Const enum - не создаёт объект в рантайме
const enum Color {
Red = '#FF0000',
Green = '#00FF00',
Blue = '#0000FF'
}
// После компиляции будет просто '#FF0000'
const bgColor = Color.Red;

Как отвечать на собеседовании

Начни с краткого определения, затем упомяни основные виды enum. Покажи понимание разницы между числовым и строковым enum, а также когда использовать const enum. Приведи пример из реальной практики - например, статусы заказа. Хорошо бы упомянуть альтернативы (union типы) и объяснить, когда что выбирать. Не углубляйся в reverse mapping, если не спросят.

Что проверяет интервьюер

  • Понимание базового синтаксиса и назначения enum
  • Знание различий между числовыми и строковыми enum
  • Осведомлённость о const enum и его особенностях
  • Умение выбирать между enum и другими подходами (union types)
  • Понимание, что enum компилируется в JavaScript-объект (кроме const enum)

Типичные ошибки

  • Путать enum с обычными объектами или union типами
  • Не знать, что числовой enum поддерживает reverse mapping (доступ к имени по значению)
  • Использовать enum там, где достаточно union типа (излишняя тяжеловесность)
  • Забывать инициализировать строковые enum явно
  • Думать, что const enum ведёт себя так же, как обычный enum (он не создаёт объект в рантайме)

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью