Почему я больше не использую 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.
Всем маленького бандла и почаще заглядывайте в собранный код. 🥰```