Вопрос проверяет понимание того, как enum реализованы в TypeScript и какие практические проблемы могут возникать.
Enum увеличивают размер бандла, потому что превращаются в объект в JavaScript. Они менее гибкие, чем union types, и иногда усложняют типизацию. Также возможны неожиданные особенности при работе с числовыми enum и обратным маппингом. Поэтому в современном TypeScript часто предпочитают строковые union-типы.
Enum в TypeScript удобны, но имеют ряд практических ограничений.
Определение: Enum — тип, который компилируется в JavaScript-объект, содержащий значения и иногда обратное отображение.
Пример:
enum Status {
Active,
Disabled
}
Компиляция приводит к созданию объекта.
Причина:
Enum создаёт объект.
Иногда добавляется обратный маппинг.
В больших проектах это увеличивает итоговый код.
Вместо enum часто используют:
type Status = "active" | "disabled";
Плюсы union:
Нет лишнего кода в JS.
Проще интегрировать с API.
Числовые enum:
Допускают неочевидные значения.
Могут приводить к ошибкам при сравнении.
Пример:
enum Role {
Admin = 1
}
let r: Role = 999 as Role; // возможно
Когда нужен набор констант.
Когда важно явное пространство имён.
В библиотечном коде.
Вывод: enum удобны, но могут увеличивать бандл и уступают union-типам по гибкости, поэтому их применяют осознанно.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию