TS-常量枚举

如果使用普通的数值枚举或字符串枚举,在编译成JavaScript代码后会产生较多代码来支持各项功能,开销较大且可读性较差,而且很可能被人误用。例如,使用索引查找或反向映射会导致可读性进一步变差,出错率进一步提高。

要解决上述问题,使用常量枚举。要定义常量枚举,只需在普通枚举的定义前面加上const关键字,示例代码如下。

复制代码
const enum Answer {
    no,
    yes,
}
 
let actualAnswer: Answer = Answer.yes;

此时如果编译这段代码,你可以发现它与普通枚举编译后产生的JavaScript代码存在区别。以下是普通枚举编译后产生的JavaScript代码。

复制代码
var Answer;
(function (Answer) {
    Answer[Answer["no"] = 0] = "no";
    Answer[Answer["yes"] = 1] = "yes";
})(Answer || (Answer = {}));
var actualAnswer = Answer.yes;

以下是常量枚举编译后产生的JavaScript代码,整体上更精简。

复制代码
var actualAnswer = 1 /* yes */;

如果对常量枚举使用索引查找或反向映射,编译将无法通过,示例代码如下。

复制代码
let inputString: string = "yes";
//编译错误:只有使用字符串文本才能访问常数枚举成员。ts(2476)
let userAnswer: Answer = Answer[inputString]; 
//编译错误:只有使用字符串文本才能访问常数枚举成员。ts(2476)
let nameOfyes: string = Answer[Answer.yes]; 
相关推荐
hboot8 小时前
别再被 TS 类型冲突折磨了!一文搞懂类型合并规则
前端·typescript
王林不想说话8 小时前
提升工作效率的Utils
前端·javascript·typescript
cute_ming9 小时前
从 Node.js + TypeScript 无缝切换到 Python 的最佳实践
python·typescript·node.js
T112410 小时前
深入解析 OpenCode:下一代 AI 编程助手的架构艺术
typescript·aigc
小二·13 小时前
Vite 构建完全指南:极致性能优化、安全加固与自动化部署(Vue 3 + TypeScript)
安全·性能优化·typescript
一只爱吃糖的小羊14 小时前
从 AnyScript 到 TypeScript:如何利用 Type Guards 与 Type Predicates 实现精准的类型锁死
前端·javascript·typescript
先生沉默先14 小时前
TypeScript 学习_类型与语法(2)
学习·typescript
奔跑的web.16 小时前
TypeScript类型系统核心速通:从基础到常用复合类型包装类
开发语言·前端·javascript·typescript·vue
Kagol16 小时前
🎉历时1年,TinyEditor v4.0 正式发布!
前端·typescript·开源
踢球的打工仔16 小时前
typescript-var和let作用域
前端·javascript·typescript