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
相关推荐
mmsx3 分钟前
一个黑边 Bug 修了两版:自己算矩阵直接黑屏,借库重建只用了一行 setZoom
android·前端
丑过三八线4 分钟前
001 -【FastAPI 入门教程】 FastAPI Helloword
前端·chrome·fastapi
禁止摆烂_才浅6 分钟前
Axios 高频面试题
前端·面试·axios
何时梦醒6 分钟前
TypeScript 工具类型一篇讲透:Pick、Omit、Partial、Exclude、Record、ReturnType、keyof
前端·面试·typescript
用户2181697049307 分钟前
Flutter (十九) Tabbar
前端
默_笙7 分钟前
🍳 受控组件和非受控组件,我纠结了一整天,最后用"房东和租客"讲明白了
前端·javascript
缓冲中请稍后8 分钟前
前端HTTP请求完全指南:从基础到LLM接口调用实战
前端·面试
半个落月8 分钟前
React 受控组件与非受控组件详解:从输入框到表单校验
前端·react.js
BreezeJiang9 分钟前
写了 display:flex,为什么三栏布局还没完成?
前端·css
Hilaku9 分钟前
高级前端如何优雅地拒绝不合理的产品需求?
前端·javascript·程序员