我在一个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的问题?
对我来说,一个枚举应该有不同的键,但也许不一定有不同的值?如果有一种方法告诉枚举它必须有不同的值,那就太好了。
4条答案
按热度按时间pcww981p1#
关于TS ENUM规范:
枚举允许我们定义一组命名常量。使用枚举可以更容易地记录意图,或创建一组不同的大小写。TypeScript提供数字和基于字符串的枚举。
没有什么关于它应该是uniq的,所以可能这种行为是好的。
enum/typescript
**更新:**关于ENUM和“bug”还有一件有趣的事情:
枚举值递增不考虑以前定义的值,编译器也不会在出现重复值时引发错误。
这意味着您可能会遇到潜在的bug:
rm5edbpk2#
添加一个您可能会遇到的实际问题(请记住,在运行时使用的是值):
没有办法进入case Toto.B case。如果typescript不允许重复的名称,那就方便了。
t98cgbkg3#
有一个typescript-eslint rule用于此:
no-duplicate-enum-values
.piztneat4#
同样的行为也发生在C#中: