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
相关推荐
李@十一₂⁰9 分钟前
HTML 特殊字体符号
前端·html
小奶包他干奶奶2 小时前
Webpack学习——Loader(文件转换器)
前端·学习·webpack
zy happy3 小时前
若依 vue3 报错:找不到模块“@/api/xxxx/xxxxx”或其相应的类型声明。。Vue 3 can not find mod
前端·javascript·vue.js
潘小安3 小时前
Git Worktree + Claude Code:让你的开发效率翻倍的秘密武器
前端
meichaoWen3 小时前
【Vue3】vue3的全面学习(一)
前端·javascript·学习
小猪努力学前端4 小时前
在 React + React Router v7 SSR 项目里做多端适配,我踩的两个坑
前端·react.js
q***d1734 小时前
React桌面应用开发
前端·react.js·前端框架
8***29314 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
0***144 小时前
React计算机视觉应用
前端·react.js·计算机视觉
Q***K554 小时前
React高级
前端·react.js·前端框架