Junior #enum#as-const#union
enum và const object (as const) khác nhau thế nào? Nên dùng cái nào?
⚡ Trả lời nhanh
`enum` tạo ra code runtime (numeric enum còn có reverse mapping), còn string-literal union hoặc `const` object + `as const` chỉ là type, không thêm gì vào bundle. Hiện nay thường ưu tiên const object/union vì tương thích với tooling chỉ xóa type và dễ debug.
Ví dụ
main.ts · sửa được
enum | const object + as const | |
|---|---|---|
| Code runtime | có (IIFE) | object thường |
| Reverse mapping | có (numeric) | không |
| Nhận string literal thô | không ("active" không gán được cho string enum) | có |
| Chỉ xóa type (Babel, esbuild, Node strip types) | enum cần transform | tương thích |
| Tree shaking | kém hơn | tốt |