> Что такое 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// Числовой enumenum Direction {Up, // 0Down, // 1Left, // 2Right // 3}// Строковый enumenum 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 (он не создаёт объект в рантайме)
> Похожие задачи по frontend
Как реализовать функцию getProperty с типизацией в TypeScript, которая возвращает значение по ключу объекта?
Что такое utility types в TypeScript, например Partial и DeepPartial
Что такое объединение и пересечение типов в TypeScript
Что такое декораторы в TypeScript и для чего они используются
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью