ts枚举(enum)

TypeScript的枚举(enum)是一种特殊的数据类型,允许你定义一组命名的常量。它可以帮助你创建清晰、可读性强的代码,避免使用"魔法数字"或字符串。

一种数据类型,包含一组固定的、命名的值。

1.数字枚举(numeric enum)

这是最常见的枚举类型。枚举成员的值是数字。

基本用法:

  1. 枚举类型 的内部实现:用数字 来代表一组命名的常量。

  2. 遍历操作 :在程序中循环处理一个数字序列

ts 复制代码
enum Direction {
    Up,      // 0
    Down,    // 1
    Left,    // 2
    Right    // 3
}

console.log(Direction.Up);        // 输出: 0
console.log(Direction[0]);        // 输出: "Up" (反向映射)

还可以赋值:

ts 复制代码
enum StatusCode {
  Success = 200,
  NotFound = 404,
  ServerError = 500,
}

console.log(StatusCode.Success);
console.log(StatusCode.NotFound);
console.log(StatusCode.ServerError);

手动设置:

ts 复制代码
enum Status {
  Off = 0,
  On = 1,
  Standby = 10, // 手动设置
}
console.log(Status.Off);
console.log(Status.On);
console.log(Status.Standby);
2.字符串枚举(string enum)

特点:

  • 更语义化,常用于API响应、状态码等。
  • 不支持反向映射(因为字符串到数字的映射不唯一)。
  • 所有成员必须有初始值。
ts 复制代码
enum Color {
  Red = "RED",
  Green = "GREEN",
  Blue = "BLUE",
}

console.log(Color.Red); // 输出: "RED"
console.log(Color["RED"]); //无反向映射,会是 undefined
3.异构枚举(heterogeneous enum) 不推荐别用了

混合使用数字和字符串成员(不推荐,容易造成混乱)。

ts 复制代码
enum Mixed {
  No = 0,
  Yes = "YES",
}

console.log(Mixed[0]);
console.log(Mixed.Yes);
4.常量枚举(const enum)

使用const enum 声明,编译时会被完全移除,内联到使用的地方。

特点:
  • 提升性能,减少生成的js代码。
  • 没有运行对象,因此不能使用Direction【0】这样的反向查找。
  • 必须在编译时就能确定所有值。
ts 复制代码
const enum Direction {
  Up,
  Down,
  Left,
  Right,
}

let move = Direction.Up; // 编译后变成: let move = 0;
console.log(move)
5.计算枚举成员(computed enum members)

枚举成员的值可以是计算表达式。

注意:
  • 计算成员不能用于 const enum
  • 如果有计算成员,就不能使用反向映射。
ts 复制代码
function getStart() {
  return 1;
}

enum Computed {
  A = getStart(),
  B = A + 1,
  C = "foo".length,
}

// 打印方式任选其一:

console.log("A =", Computed.A);
console.log("B =", Computed.B);
console.log("C =", Computed.C);

// 或者
console.log(Computed);

// 或者
for (let key in Computed) {
  if (isNaN(Number(key))) {
    console.log(`${key} = ${Computed[key]}`);
  }
}
枚举的使用场景:
  • 状态码
ts 复制代码
httpStatus.Success,httpStatus.NotFound
  • UI状态
ts 复制代码
loadingState.Loading,loadingState.Success
  • 配置选项
ts 复制代码
Theme.Light,Theme.Dark
  • 协议类型
ts 复制代码
Protocol.Http,Protocol.Ws
相关推荐
天蓝色的鱼鱼11 小时前
前端开发者的组件设计之痛:为什么我的组件总是难以维护?
前端·react.js
codingandsleeping11 小时前
使用orval自动拉取swagger文档并生成ts接口
前端·javascript
石金龙12 小时前
[译] Composition in CSS
前端·css
白水清风12 小时前
微前端学习记录(qiankun、wujie、micro-app)
前端·javascript·前端工程化
Ticnix12 小时前
函数封装实现Echarts多表渲染/叠加渲染
前端·echarts
用户221520442780012 小时前
new、原型和原型链浅析
前端·javascript
阿星做前端12 小时前
coze源码解读: space develop 页面
前端·javascript
叫我小窝吧12 小时前
Promise 的使用
前端·javascript
NBtab13 小时前
Vite + Vue3项目版本更新检查与页面自动刷新方案
前端
天天扭码13 小时前
来全面地review一下Flex布局(面试可用)
前端·css·面试