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
相关推荐
FungLeo4 小时前
成为全栈·React 管理后台篇·总复盘:从“接口能调通”到“后台值得使用”
前端·react.js·前端框架·项目复盘·成为全栈
Csvn5 小时前
并发模式:让渲染学会排队、插队和让路
前端
可乐鸡翅yeah_5 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
Flynt5 小时前
Linear 用 1000 个 PR 换掉 styled-components,我写了 200 个按钮,把这笔账复现了一遍
前端·css·preact
JavaGuide6 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel7 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
莪_幻尘8 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm
风骏时光牛马8 小时前
AI模型综合能力评测:性能、指令遵循与多场景实测对比
前端
Frag0ut8 小时前
Chrome与Chromium内核浏览器在Windows 11上的新特性全景解析
前端·chrome·windows·web安全·chromium·gemini ai·playready drm
hiahiahia1239 小时前
实现完整 Tool Dispatcher
开发语言·前端