Syntax
enum Name { Member1, Member2 }Examples
Numeric and String Enums
The two main enum flavors.
enum Direction {
Up, // 0
Down, // 1
Left, // 2
Right // 3
}
enum Status {
Pending = "PENDING",
Active = "ACTIVE",
Completed = "COMPLETED"
}
function move(direction: Direction) {
console.log(Direction[direction]); // reverse lookup: "Up", "Down", etc for numeric enums
}
move(Direction.Up);
console.log(Status.Active); // "ACTIVE"const enum - Zero Runtime Cost
Fully erased at compile time, unlike a regular enum.
const enum Size {
Small,
Medium,
Large
}
let mySize = Size.Medium;
// Compiles down to: let mySize = 1;
// No Size object exists at runtime at all - completely inlinedBest practices
- Consider a literal type union ("small" | "medium" | "large") instead of an enum for simple cases - it requires no import and integrates more naturally with plain JS
- Use string enums over numeric enums when the value might be logged, serialized, or debugged, since string values are self-explanatory
- Use const enum only when you specifically want zero runtime footprint and do not need reverse lookups - be aware it has some restrictions in certain build tools
- Avoid mixing numeric and string values within the same enum, as it can produce confusing reverse-lookup behavior
Runtime & versions
Compiled to JavaScript. Feature availability depends on the language and runtime version used by your project; consult the official reference below.
TypeScript Handbook