TypeScript 词条目录
前端Wiki/词条/枚举 enum

枚举 enum

定义给一组相关的常量取语义化名字的类型,避免代码里到处出现魔法数字/字符串

enum Status { Pending, Success, Fail } 编译后生成一个真实的 JS 对象(双向映射:Status.Pending === 0 且 Status[0] === 'Pending')。数字枚举不写值时从 0 自增;字符串枚举可读性更好,打印日志时直接显示语义。开发中枚举成员就往往被当作联合类型来约束取值范围。

枚举的争议:它编译后会生成运行时代码(与 type 联合类型不同),且 const enum 在某些打包器(isolatedModules 模式下的 Vite/esbuild)下受限。现代社区更推荐用「字面量联合类型 + as const 常量表」替代,二者各有场景,团队统一即可。

TypeScript
// 数字枚举(默认从 0 自增)
enum Status { Pending, Success, Fail }
const s: Status = Status.Success;   // 1
console.log(Status[1]);            // "Success"(反向映射)

// 字符串枚举(日志友好)
enum Role {
  Admin = "admin",
  User = "user",
}

// 编译产物:真实的 JS 对象
// var Status; (function (Status) {
//   Status[Status["Pending"] = 0] = "Pending"; ... })

// 替代方案:字面量联合 + as const(零运行时开销)
const CODE = { OK: 200, NOT_FOUND: 404 } as const;
type Code = (typeof CODE)[keyof typeof CODE];  // 200 | 404
⚠ 常见误区
🔗 相关词条接口 interfaceany 与 unknown 与 never工具类型
← 返回来源章节枚举 enum