TGViewer
Frontend Alliance | Автушенко Андрей Frontend Alliance | Автушенко Андрей @frontendalliance · 2.22K subscribers
Post #120 1.79K
Самое важное про Enum

В TypeScript есть enum (сокращение от enumeration: перечисление) - это специальный тип, который позволяет создавать именованные наборы значений.

Если значение не задано, элементы будут автоматически пронумерованы числами, начиная с 0.

enum Status {
Loading,
Success,
Error
}

let currentStatus: Status = Status.Success;

console.log(currentStatus); // 1, потому что Loading = 0, Success = 1 и т.д.


При этом можно задать значения явно.

enum Status {
Loading = 'loading',
Success = 'success',
Error = 'error',
}

let currentStatus: Status = Status.Success;

console.log(currentStatus); // 'success'


Enum позволяет сделать код более читаемым.
Мы избегаем «магических» строк и чисел и сразу видим, какую бизнес-ценность несёт проверка. Код при этом становится самодокументируемым.

🟣Чем enum лучше обычных объектов?
Проблема объектов в том, что мы не можем напрямую использовать объект как тип для типизации перечисления значений.
Даже используя оператор typeof мы получим тип всего объекта, а не конкретное перечисление возможных значений (скрин 1).

Enumы решает эту проблему и добавляют удобный автокомплит (скрин 2).

Но важно понимать, что enumы не пропадают бесследно.
Они компилируется в объект, который содержит все значения (скрин 3).

Именно поэтому обычные числовые enumы имеют двустороннюю связь: по значению можно получить ключ.
enum Direction {
Up, // 0
}

console.log(Direction[0]); // Output: "Up"


🟣С точки зрения оптимизации памяти - такой подход уступает обычным литералам.
Поэтому в TypeScript существуют const enum.

Вместо создания полноценного объекта при компиляции, значения подставляются напрямую как литералы, что значительно экономит память (скрин 4).

🟣Однако const enum накладывает некоторые ограничения:

- Мы теперь не можем итерироваться по enumу, так как объекта физически нет (скрин 5).

- Мы не можем использовать обратное отображение для числовых enumов, чтобы получить ключ по значению (скрин 6).

🟣Так же в современном TypeScript мы можем использовать объекты с as const как альтернативу enum.
Эта конструкция создаёт readonly объект, где все значения используются как литералы.

const Status = {
Loading: 'loading',
Success: 'success',
Error: 'error',
} as const;


Вы можете спросить: как в таком случае типизировать входные данные, если обычный объект не позволял этого сделать?

Благодаря константному объекту - теперь мы сможем затипизировать значения объекта с помощью двух операторов:
- оператор typeof — позволяет получить тип на основе объекта.
- оператор keyof — позволяет получить ключи типа.

Написав соответствующую строчку, мы можем создать тип TStatus, который будет включать только конкретные значения объекта (скрин 7).

✈️ Telegram | 🎓 Менторство | 📹 YouTube | 👩‍💻 Roadmap
  • 🔥 14
  • 👍 6
  • ✍ 4
  • ❤ 1
More from @frontendalliance
  1. Sep 19, 2026Скам на рынке труда Скам в интернете уже давно не удивляет. Но сегодняшний скам паразитиру…
  2. Sep 15, 2026Post #141
  3. Sep 10, 2026Post #140
  4. Aug 21, 2026Post #139
  5. Aug 6, 2026Type refinements: все способы уточнить тип Type Refinement (или уточнение типа) - это проц…
  6. Jun 30, 2026WeakMap и WeakSet На защитах материала у студентов по JavaScript я регулярно вижу один и т…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →