我在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提交问题?
对我来说,枚举应具有不同的键,但不一定必须具有不同的值?如果有一种方法可以告诉枚举它必须具有不同的值,那就太好了。
答案 0 :(得分:3)
关于TS ENUM规范:
枚举允许我们定义一组命名常量。使用枚举可以更轻松地记录意图或创建一组不同的案例。 TypeScript提供数字和基于字符串的枚举。
它没有什么应该是唯一的,所以behaivor可能是好主意。
更新: 关于ENUM和“ bug”还有另一件有趣的事情:
枚举值递增不会考虑以前定义的值,编译器也不会在重复值上引发错误。
这意味着您可能会遇到潜在的错误:
enum Color {Red = 3, Green = 2, Blue};
Color.Red == Color.Blue; //true
答案 1 :(得分:0)
要添加一个实际的问题,您可能会遇到这种情况(请记住,在运行时它是使用的值):
enum Toto {
A = "a",
B = "a"
}
const a = Toto.B;
switch (a) {
case Toto.A:
console.log("1");
break;
case Toto.B:
console.log("2");
}
没有办法进入Toto.B案件。如果打字稿不允许重复的名称,那将很方便。
答案 2 :(得分:0)
在c#中也会发生相同的行为:
void Main() {
var blue = Color.Blue;
blue.Dump(); // Red
}
enum Color {
Red = 3,
Green = 2,
Blue
}