首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >TypeScript >TypeScript 中的枚举(enum)有哪些类型?与普通对象有何区别?

TypeScript 中的枚举(enum)有哪些类型?与普通对象有何区别?

词条归属:TypeScript

1. 数字枚举

  • 默认从 0 开始自动递增,也可以显式指定起始值
  • 支持双向映射:既可以通过名称获取数值(Direction.Up 返回 0),也可以通过数值获取名称(Direction[0] 返回 "Up")
  • 编译后生成一个包含正向和反向映射的 JavaScript 对象
  • 风险:数字枚举的值在运行时只是数字,Direction.Up === 0 为 true,可能导致意外的类型混淆

2. 字符串枚举

  • 每个成员必须显式指定字符串值
  • 只有正向映射,没有反向映射
  • 编译后的值是自描述的字符串,便于调试和序列化
  • 更适合需要跨网络边界传输的场景,如 API 状态字段

3. const 枚举

  • 使用 const enum 声明,编译时会将枚举值内联到每个使用位置
  • 编译后不生成任何枚举对象,零运行时开销
  • 限制:不支持反向映射,无法迭代枚举成员,与 isolatedModules 模式不兼容
  • 现代构建工具(esbuild、SWC、Babel)默认启用 isolatedModules,因此 const enum 在这些环境中可能无法正常工作

4. 枚举与联合类型的对比

  • 字符串字面量联合类型("PENDING" | "ACTIVE" | "CLOSED")提供相同的编译时类型安全,且编译后零运行时开销
  • 联合类型不需要生成 JavaScript 对象,与 isolatedModules 完全兼容
  • 枚举可以作为 switch 语句的判别字段,与联合类型配合使用
  • 当需要运行时迭代枚举值或需要命名空间对象时,使用真正的枚举;否则优先使用联合类型

5. 异构枚举

  • 技术上允许在同一个枚举中混合字符串和数字成员
  • 例如 enum Mixed { No = 0, Yes = "YES" }
  • 官方不推荐这种用法,因为语义不清晰且容易引起混淆
相关文章
TypeScript 中枚举类型的理解?应用场景有哪些
枚举是一个被命名的整型常数的集合,用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型
全栈若城
2024-10-09
7300
你知道 JavaScript 中的错误对象有哪些类型吗?
每当 JavaScript 中发生任何运行时错误时,都会引发Error对象。 在许多情况下,我们还可以扩展这些标准Error对象,以创建我们自己的自定义Error对象。
前端小智@大迁世界
2020-05-12
9.4K1
Spark中普通集合与RDD算子的sortBy()有什么区别
如图所示,我这调用的sortby()是List集合的方法了,不是算子,所以不能加false参数指定降序排,只能默认的升序排了,但是用reverse()反转就能达到一样的效果。 或者使用takeRight()方法取后十个也一样,注意的是后十个也是按升序排的
孙晨c
2021-04-01
7770
Spark中普通集合与RDD算子的sortBy()有什么区别
==结论==:普通集合的sortBy就没有**false**参数,也就是说只能默认的升序排。如果需要对普通集合中的元素需要升序排怎么办?
孙晨c
2021-03-29
9200
Spark中普通集合与RDD算子的zip()拉链有什么区别
集合中的zip: 如果两个集合的元素个数不相等,那么会将同等数量的数据进行拉链,多余的数据省略不用
孙晨c
2021-04-01
8900
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券