Ответ
Enums в TypeScript имеют несколько потенциальных проблем:
- Числовые enums могут быть небезопасными — они допускают невалидные значения:
enum Status {
Active = 1,
Inactive = 2
}
const s: Status = 999; // Ошибки не будет
- Обратное маппинг может сбивать с толку:
enum Color { Red = 1 }
console.log(Color[1]); // "Red" - не всегда ожидаемое поведение
-
Tree-shaking — enums генерируют реальный код в runtime, что мешает удалению неиспользуемого кода.
-
Строковые enums не поддерживают обратное маппинг вообще.
-
Const enums решают проблему tree-shaking, но требуют
preserveConstEnumsи не работают в изолированных модулях.
Альтернатива — использовать union types:
type Status = 'active' | 'inactive';