代码之家  ›  专栏  ›  技术社区  ›  Alexander Mills

TS枚举中的重复字符串值不会导致编译错误?

  •  3
  • Alexander Mills  · 技术社区  · 6 年前

    我有一个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是“坏参数”,它将同时匹配maxretries和badArgumentsError。

    这应该发生吗?或者我应该在GitHub上用typescript提交一个问题吗?

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   Sh. Pavel    6 年前

    关于TS枚举规范:

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

    它不应该是uniq,所以Behavior可能没事。

    enum/typescript

    更新: 枚举和“bugs”还有一个有趣的地方:

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

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

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