TypeScript Enums: enum, const enum & as const
TypeScript enums come in three main forms: standard `enum` generates runtime code, `const enum` is inlined at compile time, and `as const` is a pure type-level constraint. Understanding their differences is important for optimizing bundle size and maintaining type safety.
Common Templates
// Standard enum
export enum OrderStatus {
Pending = 'pending',
Paid = 'paid',
Refunded = 'refunded',
}
// const enum (compile-time inline)
export const enum PaymentMethod {
Card = 'card',
Paypal = 'paypal',
}
// as const object
export const Roles = {
Admin: 'admin',
Editor: 'editor',
Viewer: 'viewer',
} as const;
export type Role = typeof Roles[keyof typeof Roles];
Each approach has trade-offs: enum is most flexible but larger in size, const enum is lightest but has compatibility issues, as const is simplest but limited in functionality.