🎯 学习目标

  • 理解枚举的概念和用途
  • 掌握数字枚举和字符串枚举
  • 学会异构枚举和常量枚举
  • 了解枚举的最佳实践

🔢 数字枚举

// 定义数字枚举(默认从 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 代码,适合性能敏感场景。但无法使用反向映射。

📊 枚举对比表

类型 反向映射 编译输出 使用场景
数字枚举 支持 生成枚举对象 状态码、序号
字符串枚举 不支持 生成枚举对象 角色、配置值
常量枚举 不支持 内联值 性能敏感场景

📝 本节小结

  • • 枚举用于定义一组命名常量
  • • 数字枚举支持反向映射
  • • 字符串枚举更易读,适合配置
  • • 常量枚举编译优化,适合性能场景