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'}
我正在尝试将 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'}