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
相关推荐
CHU72903513 分钟前
在线教学课堂APP前端功能:搭建高效线上教学生态
前端·人工智能·小程序·php
We་ct2 小时前
LeetCode 125. 验证回文串:双指针解法全解析与优化
前端·算法·leetcode·typescript
帅得不敢出门2 小时前
Android Framework在mk中新增类似PRODUCT_MODEL的变量并传递给buildinfo.sh及prop属性中
android·linux·前端
小码吃趴菜2 小时前
【无标题】
前端·chrome
毕设源码-朱学姐3 小时前
【开题答辩全过程】以 基于HTML5的购物网站的设计与实现为例,包含答辩的问题和答案
前端·html·html5
梦6503 小时前
CSS 元素垂直水平居中的 8 种方法
前端·css
We་ct4 小时前
LeetCode 68. 文本左右对齐:贪心算法的两种实现与深度解析
前端·算法·leetcode·typescript
ShoreKiten4 小时前
ctfshow-web316
运维·服务器·前端
前端 贾公子4 小时前
release-it 使用指南
前端·javascript
全栈技术负责人4 小时前
前端团队 AI Core Workflow:从心法到落地
前端·人工智能·状态模式