В чем разница между enum и const enum

«В чем разница между enum и const enum» — вопрос из категории TypeScript, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

enum и const enum в TypeScript оба используются для создания перечислений, но есть ключевые различия:

  1. Генерация кода

    • enum создаёт реальный объект в скомпилированном JavaScript.
    • const enum полностью удаляется при компиляции, заменяясь на значения.
  2. Использование

    • enum можно использовать динамически (например, Object.keys(MyEnum)).
    • const enum только для статического доступа (MyEnum.Value).
  3. Оптимизация
    const enum предпочтительнее, если нужна производительность, так как не генерирует лишний код.
// enum (остаётся в JS)
enum Direction {
  Up = 'UP',
  Down = 'DOWN'
}
console.log(Direction.Up); // 'UP'

// const enum (исчезает после компиляции)
const enum Status {
  Active = 1,
  Inactive = 0
}
console.log(Status.Active); // заменяется на console.log(1)