TypeScript 枚举键 - 字符串不可分配给枚举类型

TypeScript enum key - string is not assignable to type Enum

我正在尝试将 typescript 与 graphql 一起使用,他们的枚举系统让我有些头疼。我正在使用数字索引枚举,而没有在 ts 枚举上指定值,例如:

enum Enum { A }

因为 graphql 枚举不能有数字,我有一个自定义解析器来将字符串值转换为相应的索引。为了测试我要做的是:

const a: Enum = Enum[Enum.A]

但是,我收到以下错误:

Type 'string' is not assignable to type 'Enum'.(2322)

我有点理解背后的逻辑,因为在 [] 中我可以将不存在的密钥放在枚举中,但密钥本身就是枚举本身,所以它应该足够自信因为它 return 枚举,而不仅仅是字符串。因为 Object.values(Enum) 是 return 键和值,所以获取键应该仍然是枚举。

是否有任何解决方法?

此代码:

enum Enum { A }

编译为:

var Enum;
(function (Enum) {
    Enum[Enum["A"] = 0] = "A";
})(Enum || (Enum = {}));

依次编译为

{
  0:'A'
 'A':0
}

因此,此代码:

const a: Enum = Enum[Enum.A]

字面上的意思是:

const a: Enum = Enum[0]

因此,以上代码编译为:

const a: Enum = 'A'

字符串 A 不可分配给枚举,因为您的 enum 是数字。

就我个人而言,我认为你应该避免使用数字枚举,而使用 enum Foo {A='A'}