Почему я больше не использую enum

Привет, Мир! 🍷

Вчера на работе доделали большой эпик по миграции с enum на const enum в TypeScript. Когда-нибудь задумывались что лучше? Enum, const enum или может union types?

Вроде все подходы про одно и тоже, но под капотом разница колоссальная. Сейчас расскажу, почему мы пришли к такому выбору.

У обычных enum есть несколько недостатков. Самый основной для нас это сильное влияние на размер бандла, а значит и влияние на скорость и производительность сайта .

Когда-нибудь смотрели во что превращается enum после транспиляции? Можно подумать, что TypeScript это всего лишь типы, но на самом деле он неплохо так мусорит в коде.

`export enum MOBILE_OS { IOS = 'iOS', ANDROID = 'Android' }

превращается в

`еxport var MOBILE_OS; (function (MOBILE_OS) { MOBILE_OS["IOS"] = "iOS"; MOBILE_OS["ANDROID"] = "Android"; })(MOBILE_OS || (MOBILE_OS = {}));

Никакой минифаер эту конструкцию распилить не сможет, а значит в бандл всегда поедут все значения. Теперь посчитайте сколько таких enum у вас в проекте и сколько лишнего кода вам приходится грузить.

От enum мы перешли к const enum. Они во многом похожи, однако после транспиляции там останется только нужное значение.

`const enum MOBILE_OS { IOS = 'iOS', ANDROID = 'Android', }

const ios = MOBILE_OS.IOS

превращается в

const ios = "iOS" /* IOS */;

Ничего лишнего, все тришейкается как и должно. Рекомендую всем присмотреться к переходу от enum к const enum или union types.

Всем маленького бандла и почаще заглядывайте в собранный код. 🥰```