🔢 数字枚举
// 定义数字枚举(默认从 0 开始)
enum Direction {
Up, // 0
Down, // 1
Left, // 2
Right // 3
}
let move: Direction = Direction.Up;
console.log(move); // 0
console.log(Direction[0]); // 'Up' (反向映射)
// 自定义起始值
enum Status {
Pending = 1,
Approved, // 2
Rejected // 3
}
// 完全自定义值
enum HttpStatus {
OK = 200,
NotFound = 404,
ServerError = 500
}
📝 字符串枚举
// 字符串枚举(没有反向映射)
enum UserRole {
Admin = 'ADMIN',
User = 'USER',
Guest = 'GUEST'
}
let role: UserRole = UserRole.Admin;
console.log(role); // 'ADMIN'
// 使用场景
function checkPermission(role: UserRole) {
if (role === UserRole.Admin) {
console.log('拥有管理员权限');
}
}
🔧 异构枚举
// 混合数字和字符串(不推荐)
enum BooleanEnum {
No = 0,
Yes = 'YES'
}
// 推荐:使用联合类型代替
type BooleanLike = 0 | 'YES';
⚠️
异构枚举
异构枚举容易造成混淆,通常建议使用数字枚举或字符串枚举,避免混合使用。
⚡ 常量枚举
// 使用 const 关键字定义常量枚举
const enum Colors {
Red,
Green,
Blue
}
// 编译后会被内联,不生成枚举对象
let color = Colors.Red; // 编译为: let color = 0;
// 对比普通枚举编译结果
enum NormalColors {
Red = 0,
Green = 1,
Blue = 2
}
// 编译后生成完整的枚举对象
💡
常量枚举优势
常量枚举在编译时会被完全内联,不生成额外的 JavaScript 代码,适合性能敏感场景。但无法使用反向映射。