【问题标题】:Using an enum inside string valued members在字符串值成员中使用枚举
【发布时间】:2020-05-07 10:19:58
【问题描述】:

假设这些是我的枚举:

enum Direction {
    Up = `1`,
    Down = '2',
    Left = '3',
    Right = '4',
}

enum Direction2 {
    Up = Direction.Up
}

只要第二个枚举的值来自另一个枚举,上述情况就有效。但是为什么这是无效的呢?

enum Direction2 {
    Up = Direction.Up,
    Down = '2'
}

我查看了typescript enum doc,但找不到任何原因。从我所看到的, Direction2 中的两个值都是一个字符串,应该允许。我知道如果我将 Direction2 更改为 json,则可以解决此问题:

let Direction2 = {
    Up: Direction.Up,
    Down: '2'
}

但我更愿意将其保留为枚举。

【问题讨论】:

    标签: typescript enums


    【解决方案1】:

    您的语法应该会抛出错误:

    在具有字符串值成员的枚举中不允许​​计算值。

    Typescript 首席开发人员故意禁止这样做。:

    字符串枚举在语法上与数字枚举的区别在于所有初始化位置都有字符串文字。在这种情况下,我们还需要为字符串字面量枚举生成联合类型(而不是标记的原始类型),如果没有显式类型注释,这些枚举并不是真正来源于 const。

    https://github.com/Microsoft/TypeScript/issues/20440

    因此,您遇到的问题不是在其他枚举中引用枚举声明。只是它们的其他枚举值是字符串值。请参阅以下内容:

    // valid
    enum Test{
        A = 1,
        B = 2
    }
    enum AnotherTest{
        A = Test.B,
        B = 2
    }
    /////////////////////////////
    // valid
    enum Test{
        A = "1",
        B = "2"
    }
    enum AnotherTest{
        A = Test.B,
        B = 2
    }
    /////////////////////////////
    // INVALID
    enum Test{
        A = "1",
        B = "2"
    }
    enum AnotherTest{
        A = Test.B,
        B = "2"
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-05
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      相关资源
      最近更新 更多