指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
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) 会输出什么?