Typescript下定义 export enum 和 export const enum 哪个好
export enum 和 export const enum 都用于定义枚举,但它们之间有几个关键区别:
export const enum Status {
SUCCESS = "success",
ERROR = "error",
}
// 编译后,这行会直接变成:
console.log("success"); //实际上可以能到值
console.log(Object.values(Status)); // ❌ Status is not defined, 实际上也可以拿到值
export enum Status {
SUCCESS = "success",
ERROR = "error",
}
console.log(Object.values(Status)); // ✅ ["success", "error"]
但是实际上两种定义都可以获取到枚举值,没有报错,
但是理论上:
编译时:TypeScript → JavaScript,做类型检查、值替换等
运行时:JS 代码开始执行的阶段,浏览器或 Node.js 运行
const enum 的所有值在 编译时就被替换掉了,所以 运行时根本没有那个枚举对象
只有普通的 enum 才能在运行时用 Object.values()、console.log(Status) 等方式访问
运行时 ≠ 编译过程
阶段 描述 举例说明
编译时 TypeScript 被转成 JavaScript 的阶段(ts → js) Status.SUCCESS → "success"
运行时 最终 JavaScript 被浏览器或 Node.js 执行的阶段 console.log(Status.SUCCESS) 会输出什么?
