typescript - TS枚举中重复的字符串值不会导致编译错误?
问题描述
我在 TypeScript 枚举中有这个:
export enum LMXLockRequestError {
MaxRetries = 'bad_args',
BadArgumentsError = 'bad_args',
}
这似乎不会导致编译错误。它转译为:
var LMXLockRequestError;
(function (LMXLockRequestError) {
LMXLockRequestError["MaxRetries"] = "bad_args";
LMXLockRequestError["BadArgumentsError"] = "bad_args";
})(LMXLockRequestError = exports.LMXLockRequestError || (exports.LMXLockRequestError = {}));
如果我要使用它来做:
if(v === LMXLockRequestError.MaxRetries){
}
如果 v 是“bad_args”,它将匹配 MaxRetries 和 BadArgumentsError。
这应该发生吗?或者我应该在 Github 上提交关于 TypeScript 的问题?
对我来说,枚举应该有不同的键,但不一定有不同的值?如果有办法告诉枚举它必须具有不同的值,那就太好了。
解决方案
关于 TS ENUM 规范:
枚举允许我们定义一组命名常量。使用枚举可以更轻松地记录意图,或创建一组不同的案例。TypeScript 提供基于数字和基于字符串的枚举。
没有什么应该是 uniq 的,所以这种行为可能是好的。
更新: 关于 ENUM 和“错误”还有另一个有趣的事情:
枚举值递增不考虑先前定义的值,编译器也不会对重复值抛出错误。
这意味着您最终可能会遇到潜在的错误:
enum Color {Red = 3, Green = 2, Blue};
Color.Red == Color.Blue; //true
推荐阅读
- elasticsearch - 弹性指数的精确匹配
- spring-boot - io.jsonwebtoken.JwtParser 是多线程的吗?
- python - rpy2 不工作(libR.dylib,2):找不到合适的图像。)
- javascript - 循环依赖不能拆分成各自的文件
- r - R tsibble STL 分解表示缺少日期值但没有
- wordpress - WP-CLI 导出返回导出项目不需要的一堆作者
- python - 定义和初始化涉及 Asyncio 例程的 python 类的正确/最佳方法是什么
- php - PHP + Twilio + NGROK
- ios - FileManager .removeItem(at:) 需要很长时间——我怎么知道它什么时候完成?
- python - Magicmirror 为 python 创建模块