Một enum định nghĩa một tập hợp các hằng số được đặt tên. TypeScript có numeric enum và string enum.
{ , , , }
.;
[];
{
= ,
= ,
}
.;
Một enum định nghĩa một tập hợp các hằng số được đặt tên. TypeScript có numeric enum và string enum.
{ , , , }
.;
[];
{
= ,
= ,
}
.;
Không giống như hầu hết các type của TypeScript (vốn biến mất lúc biên dịch), một enum thông thường phát ra một object JavaScript vào bundle của bạn. Đó là lý do nhiều team ưa thích một union của các string literal kết hợp với as const, vốn hoàn toàn ở cấp độ type:
// thường được ưa thích hơn — không tốn chi phí runtime, dễ đọc trong log
const Status = { Active: "ACTIVE", Inactive: "INACTIVE" } as const;
type Status = typeof Status[keyof typeof Status]; // "ACTIVE" | "INACTIVE"
// hoặc đơn giản:
type Direction = "up" | "down" | "left" | "right";
const enum E { A, B } // được inline lúc biên dịch — không có object runtime, nhưng có một số lưu ý về tooling
Enum đặt tên có ý nghĩa cho các tập hợp cố định (trạng thái, vai trò, hướng) và nhóm chúng dưới một namespace.
Nhưng vì chúng phát ra code runtime và có những điểm kỳ quặc (numeric enum được kiểm tra lỏng lẻo), TypeScript hiện đại thường ưu tiên union của string literal cho các trường hợp đơn giản — chúng nhẹ hơn và serialize một cách tự nhiên.
Hãy dùng enum khi bạn muốn có namespacing hoặc reverse mapping.