文档教程【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址https://gitcode.com/gh_mirrors/typ/typescript-book点击查看免费下载TypeScript 的enum枚举是构建命名常量集合的核心语法也是本开源项目《The Concise TypeScript Book》第 20 章的重点内容。本文将基于该章节的韩文/英文原文website/src/content/docs/book/enums.md 及韩文版 website/src/content/docs/ko-kr/book/enums.md完整讲解数字枚举、字符串枚举、常量枚举、反向映射、环境枚举与计算成员等全部知识点并结合仓库源码如 tools/i18n.ts 中的真实枚举定义展示其工程落地方式。读完本文你将掌握各类枚举的声明语法、编译产物与运行时行为能够在项目中做出正确的枚举设计决策。枚举是什么一组命名常量在 TypeScript 中enum是一组有名字的常量值集合。它的核心价值在于用可读的成员名替代魔法数字或裸字符串同时获得编译期的类型检查。enum Color { Red #ff0000, Green #00ff00, Blue #0000ff, }上面的Color把三个十六进制颜色码绑定到Red、Green、Blue三个名称上后续代码只需写Color.Red即可无需记忆#ff0000这类字符串拼写错误也会在编译期被拦截。枚举可以通过多种方式定义下面逐一展开。数字枚举Numeric Enums数字枚举是每个常量都被赋予数值的枚举默认从0开始自动递增enum Size { Small, // 值从 0 开始 Medium, // 1 Large, // 2 }如果希望指定起始值可以显式给第一个成员赋值后续成员会在此基础上继续递增enum Size { Small 10, Medium, // 11 Large, // 12 } console.log(Size.Medium); // 11这是数字枚举最重要的特性自动递增。你只需要确定起点后续成员的值由编译器按顺序补全适合表示状态码、等级、索引等连续数值场景。字符串枚举String Enums字符串枚举是每个常量都被赋予字符串值的枚举enum Language { English EN, Spanish ES, }与数字枚举不同字符串枚举没有自动递增——每个成员都必须显式赋值因为字符串递增没有意义。字符串枚举的可读性最好序列化到日志、API 请求、数据库时保留的是有语义的文本。值得注意TypeScript允许异构枚举Heterogeneous Enums即字符串成员与数字成员可以共存于同一个枚举中见下文反向映射章节的Grade示例。但实践中除非确有需要混用会降低可读性与可预测性。常量枚举Const Enums编译期内联常量枚举是一种特殊枚举所有值在编译期已知并在枚举被使用的每个位置直接内联inline从而生成更高效的代码。const enum Language { English EN, Spanish ES, } console.log(Language.English);上述代码编译后Language.English被直接替换为字面量ENconsole.log(EN /* Language.English */);从这段编译产物可以清晰看到 const enum 的机制编译器把成员值硬编码到调用点同时擦除枚举本身不生成任何运行时对象。这种做法的收益与代价并存收益在自包含库self-contained libraries中更高效——没有运行时的枚举对象分配也没有额外的对象查找代价值被硬编码后如果枚举定义变化消费方需重新编译才能同步且常量枚举不能包含计算成员computed members因为计算成员的值在编译期不可知无法内联。因此const enum 通常仅在关注体积与性能的库内部使用一般情况下并不推荐。反向映射Reverse Mapping反向映射是指通过枚举的值反向取回成员名的能力。默认情况下枚举成员只有名称 → 值的正向映射而通过显式设置成员值可以额外生成值 → 名称的反向映射。反向映射在按值查成员或遍历全部成员的场景下非常有用。但有一个关键前提只有数字枚举成员会生成反向映射字符串枚举成员完全不会生成。以下枚举enum Grade { A 90, B 80, C 70, F fail, }编译后的 JavaScript 产物如下use strict; var Grade; (function (Grade) { Grade[(Grade[A] 90)] A; Grade[(Grade[B] 80)] B; Grade[(Grade[C] 70)] C; Grade[F] fail; })(Grade || (Grade {}));逐行拆解这段 IIFE 即可理解反向映射的底层原理对数字成员A 90编译器执行Grade[A] 90得到赋值表达式的值90再执行Grade[90] A于是同一个对象上同时存在Grade.A 90与Grade[90] A两条双向索引而字符串成员F fail只生成Grade[F] fail单向索引因为fail不能作为合法的数字索引键参与反向赋值。因此值 → 键的映射对数字成员有效对字符串成员无效。验证如下enum Grade { A 90, B 80, C 70, F fail, } const myGrade Grade.A; console.log(Grade[myGrade]); // A console.log(Grade[90]); // A const failGrade Grade.F; console.log(failGrade); // fail console.log(Grade[failGrade]); // Element implicitly has an any type because index expression is not of type number.注意最后一个表达式Grade[failGrade]中failGrade是字符串fail而Grade的数字索引签名只接受number因此 TypeScript 报错——这正是严格类型检查在反向映射上的保护。本仓库 tools/tsconfig.json 中开启了noImplicitAny: true与strict: true此类隐式 any索引错误会在编译期直接暴露而不是留到运行时返回undefined。环境枚举Ambient Enums环境枚举是定义在声明文件*.d.ts中、不带任何实现的枚举类型。它允许你声明一组命名常量使其可以在多个文件之间以类型安全的方式使用而无需在每个使用文件中引入实现细节。典型形态如下声明文件中// globals.d.ts declare enum GlobalFlags { Debug 1 0, Verbose 1 1, }环境枚举通常用于描述外部提供的全局常量例如宿主环境注入的对象、C 系原生模块等只声明类型契约不生成运行时代码。它遵循与普通枚举相同的成员约束——常量和计算成员的规则依旧适用。计算成员与常量成员Computed vs Constant Members枚举成员按值的确定时机可分为两类常量成员Constant Members值在编译期确定运行时不可更改普通枚举与 const 枚举中都可以使用计算成员Computed Members值在运行时通过表达式计算得出只能在普通枚举中使用const 枚举不允许。常量成员示例——Blue在编译期由常量表达式求值得到6// Constant members enum Color { Red 1, Green 5, Blue Red Green, // 编译期求值 } console.log(Color.Blue); // 6编译期生成计算成员示例——Blue依赖运行时随机数每次执行结果不同// Computed members enum Color { Red 1, Green Math.pow(2, 2), Blue Math.floor(Math.random() * 3) 1, // 运行时求值 } console.log(Color.Blue); // 运行时生成的随机数判断一个成员是常量还是计算成员取决于其初始化表达式是否属于常量表达式范畴数字/字符串字面量、其他常量成员引用、常量运算等。需要边界清晰的值例如协议版本号应使用常量成员而需要动态生成的值如随机权重则必须放在普通枚举中作为计算成员。枚举成员与联合类型枚举就是其成员的联合从类型层面看枚举由成员类型组成的联合union表示。每个成员的值可通过常量或非常量表达式确定其中拥有常量值的成员会被赋予字面量类型。例如声明类型E及其子类型E.A、E.B、E.C那么E即代表联合类型E.A | E.B | E.Cconst identity (value: number) value; enum E { A 2 * 5, // 数字字面量 B bar, // 字符串字面量 C identity(42), // 不透明计算值 } console.log(E.C); // 42这个特性意味着当函数参数声明为E类型时编译器会精确到每个成员E.A、E.B、E.C各自是一个独立的字面量子类型穷尽性检查exhaustiveness checking与模式匹配因此成为可能。枚举与类型系统边界比较规则枚举与数字可以互相比较反向亦然但不同枚举类型之间的值比较是无效的。这一点在本书探索类型系统章节中有明确示例见 website/src/content/docs/ko-kr/book/exploring-the-type-system.mdenum X { A, B, } enum Y { A, B, C, } const xa: number X.A; // 有效枚举可赋给 number const ya: Y 0; // 有效数字可赋给数字枚举 X.A Y.A; // 无效不同枚举类型不可比较从源码结构看这条规则源自 TypeScript 对枚举的名义nominal类型处理枚举成员虽与number双向兼容但X.A与Y.A属于不同枚举类型二者不能直接比较。这在实践中能有效防止不同系统的状态码混用这类低级错误。仓库实战tools/i18n.ts 中的字符串枚举本仓库的构建工具链在 tools/i18n.ts 中使用了一个真实的字符串枚举来管理多语言代码正是上文字符串枚举的最佳工程示范export enum Language { en_EN en_EN, zh_CN zh_CN, it_IT it_IT, pt_BR pt_BR, sv_SE sv_SE, bg_BG bg_BG, es_ES es_ES, ja_JP ja_JP, fr_FR fr_FR, ko_KR ko_KR, id_ID id_ID, de_DE de_DE, pl_PL pl_PL, tr_TR tr_TR, vi_VN vi_VN, th_TH th_TH, ru_RU ru_RU, cs_CZ cs_CZ, ar ar, }这段代码的工程价值体现在两点成员名与值都用规范化的 locale 标识成员名采用可读的en_EN形式值同样为en_EN二者语义一致、可序列化直接用于文件名如 README-ko_KR.md、downloads/typescript-book-ko_KR.pdf与目录命名如 website/src/content/docs/ko-kr与联合类型配合紧随枚举定义同一文件声明了Languages元组类型并显式列出全部成员顺序export type Languages [Language.en_EN, Language.zh_CN, Language.it_IT, Language.pt_BR, ...]; export const languages: Languages [Language.en_EN, Language.zh_CN, ...];这样languages数组的元素顺序与数量被编译器固定新增语言时若漏改两处会直接编译报错——这正是枚举成员联合 常量字面量在真实工程中的威力。小结与设计建议围绕《The Concise TypeScript Book》第 20 章本文覆盖了枚举的全部形态与机制核心结论可归纳为数字枚举默认从 0 自动递增也可显式指定起始值数字成员生成双向正/反向映射字符串枚举必须显式赋值不生成反向映射可读性与序列化友好const enum在编译期内联并擦除枚举对象自包含库中更高效但不能含计算成员环境枚举用于*.d.ts声明文件为外部常量提供类型契约常量成员编译期求值计算成员运行时求值后者仅限普通枚举枚举在类型层面是其成员字面量的联合可用于精确类型检查枚举可与数字互相比较但不同枚举类型间不可比较。选择枚举时请结合场景状态码、等级等有序数值用数字枚举需要跨系统传输的语义标识如语言码用字符串枚举仅追求最小运行时代码时可考虑 const enum而一组固定字符串的简单映射也可以直接使用字面量联合类型type Size S | M | L替代二者各有利弊视是否需要运行时枚举对象而定。深入阅读可继续查看英文原版章节 website/src/content/docs/book/enums.md 与类型系统章节 website/src/content/docs/ko-kr/book/exploring-the-type-system.md。赞分享文档教程【免费下载链接】typescript-bookThe Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source.项目地址https://gitcode.com/gh_mirrors/typ/typescript-book点击查看免费下载相关推荐TypeScript Enum 完全指南The Concise TypeScript Book 中的枚举类型详解TypeScript Enum 完全指南The Concise TypeScript Book 中的枚举类型详解 本篇技术指南以开源仓库 typescript文档教程The Concise TypeScript Book深入解析 TypeScript 枚举Enum的完整实战指南The Concise TypeScript Book深入解析 TypeScript 枚举Enum的完整实战指南 TypeScript 的 enum 枚文档教程The Concise TypeScript Book深入解析 TypeScript 枚举Enum——数字/字符串枚举、常量枚举与反向映射的编译原理The Concise TypeScript Book深入解析 TypeScript 枚举Enum——数字/字符串枚举、常量枚举与反向映射的编译原理 Ty文档教程上一篇Mediator高级配置技巧命名空间定制与内部类型生成下一篇AsyncAPI协议绑定终极指南AMQP、Kafka、HTTP配置详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
网站建设软件有哪些内容揭秘,最佳实践避坑指南 网站建设软件有哪些内容揭秘,最佳实践避坑指南 网站做好了没人访问,这大概是老板们最头疼的事。钱花了几万,页面上线了,流量却比脸还干净。别急,这往往不是技术不行,而是你在选型和部署阶段就埋下了“死局”。… · 2026/9/27 9:05:12
排水管网检测手段怎么选?CCTV、声呐与管道机器人 一、先问一个问题:这次检测,管道里有多少水
排水管网检测手段的选择,第一个决定因素不是设备贵不贵,而是管内水位。同样一段管道,满水和半水状态适用的手段完全不同。把这一点先定下来,选型就成功了一半。… · 2026/9/27 9:05:00
智慧零售自助终端怎么选主控?RK3588 多屏+外设+支付方案解析 智慧零售自助终端怎么选主控?RK3588 多屏外设支付方案解析摘要:自助终端设备是「一主控带全屋」的典型场景:双屏显示、一堆串口外设、支付 SDK、远程运维,哪一环掉链子都直接影响营业。本文从主控选型的角度拆解 RK3588 自助终端方… · 2026/9/27 9:43:25
太原网站优化培训避坑指南:3家机构对比评测,解决无人访问难题 太原网站优化培训避坑指南:3家机构对比评测,解决无人访问难题 网站做好了没人访问,这大概是太原做市场推广的朋友最头疼的事。花了几万块建站,百度一搜,排名在几十页开外,点击量几乎为零。这时候你去找人问,对方要么推广告,要么讲一堆听不懂的技术名… · 2026/9/27 9:43:25
教培系统的消息推送:一条通知背后的技术抉择 📨「上课前1小时提醒家长」——这句产品需求背后,藏着一整个推送系统的架构决策。这篇拆解学页消息引擎的设计思路。
一、需求比想象中复杂
拆开「课前提醒」这一个场景:
提醒对象在学员时区(迪拜学员和北京学员的「提前1小时」是… · 2026/9/27 9:43:07
网站做好了没人访问?一文搞懂导入wordpress演示数据全攻略 网站做好了没人访问?一文搞懂导入wordpress演示数据全攻略 网站做好了没人访问,是不是让你头大?别急,这往往是内容太单薄,搜索引擎抓不到重点。很多刚接手运营的新手,面对空荡荡的后台束手无策。其实,解决这个问题的捷径,就是… · 2026/9/27 9:43:01
学 TRIZ 总半途放弃?新手最常踩的五个坑与三个可复现练习 学 TRIZ 的人里,真正放弃的比例远比统计出来的高。大部分人的放弃不是轰然倒塌,而是无声的:看完一本书、报过一次课,然后在某个周五下午默默把资料放进文件夹,再也没有打开。
原因往往不是「太难」。经过和大量工程师… · 2026/9/27 9:43:01
【无人机控制】面向云控无人机弹性安全防御的物理信息零信任数字孪生Matlab实现 ✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、算法改进、程序设计科研仿真。🍎 往期回顾关注个人主页:完整代码获取 定制创新 论文复现私信🍊个人信条:做科研,… · 2026/9/27 9:43:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01