首页 > 解决方案 > 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 的问题?

对我来说,枚举应该有不同的键,但不一定有不同的值?如果有办法告诉枚举它必须具有不同的值,那就太好了。

标签: typescripttypescript-typingstsc

解决方案


关于 TS ENUM 规范:

枚举允许我们定义一组命名常量。使用枚举可以更轻松地记录意图,或创建一组不同的案例。TypeScript 提供基于数字和基于字符串的枚举。

没有什么应该是 uniq 的,所以这种行为可能是好的。

枚举/打字稿

更新: 关于 ENUM 和“错误”还有另一个有趣的事情:

枚举值递增不考虑先前定义的值,编译器也不会对重复值抛出错误。

这意味着您最终可能会遇到潜在的错误:

enum Color {Red = 3, Green = 2, Blue};

Color.Red == Color.Blue; //true

推荐阅读