核心结论
普通数字枚举通常生成一个运行时对象,并包含“成员名到数值”和“数值到成员名”的双向映射,因此可以通过数字值反查成员名。字符串枚举只生成成员名到字符串值的单向映射,不产生反向映射。const enum 主要是编译期内联机制,成员引用通常会被替换为常量,不依赖运行时枚举对象。选择枚举形态时,应综合考虑是否需要反射、序列化、调试、跨包发布以及构建工具兼容性。
底层机制
数字枚举的反向映射来自编译器生成的赋值过程:代码先给名称属性赋数值,该赋值表达式又以数值作为键写入成员名,所以最终对象同时拥有两类属性。
enum Status {
Pending,
Done
}
console.