TypeScript
Beginner
1 min read
Const Enums and Enum Patterns
Example
// Const enum — values are inlined, no runtime object
const enum Weekday {
Monday = 1,
Tuesday,
Wednesday,
Thursday,
Friday,
}
const day: Weekday = Weekday.Wednesday; // compiled to: const day = 3;
// POJO enum pattern — avoids const enum pitfalls
const Color = {
Red: "RED",
Green: "GREEN",
Blue: "BLUE",
} as const;
type Color = typeof Color[keyof typeof Color]; // "RED" | "GREEN" | "BLUE"
function paintWall(color: Color): void {
console.log(`Painting with ${color}`);
}
paintWall(Color.Red); // OK
// paintWall("PURPLE"); // Error
// Iterating over an enum
enum Permission {
Read = "READ",
Write = "WRITE",
Admin = "ADMIN",
}
const allPermissions = Object.values(Permission);
// ["READ", "WRITE", "ADMIN"]
// Enum bitflags (numeric)
const enum FileMode {
None = 0,
Read = 1 << 0, // 1
Write = 1 << 1, // 2
Execute = 1 << 2, // 4
}
const mode = FileMode.Read | FileMode.Write; // 3
const canRead = (mode & FileMode.Read) !== 0; // true
const canExec = (mode & FileMode.Execute) !== 0; // false
Related Resources
TypeScript Reference
Complete tag & property list
TypeScript How-To Guides
Step-by-step practical guides
TypeScript Exercises
Practice what you've learned
More in TypeScript