我正在尝试将 typescript 与 graphql 一起使用,它们的枚举系统让我有些头疼。我使用数字索引枚举,没有指定 ts 枚举的值,如:
enum Enum { A }
因为 graphql 枚举不能有数字,所以我有一个自定义解析器来将字符串值转换为相应的索引。为了测试我想要做的是:
const a: Enum = Enum[Enum.A]
但是,我收到以下错误:
Type 'string' is not assignable to type 'Enum'.(2322)
我有点理解背后的逻辑,因为在 []
中我可以把不存在的键放在枚举上,但键本身就是枚举本身,所以它应该有足够的信心返回枚举,而不仅仅是字符串。并且因为 Object.values(Enum)
会同时返回键和值,所以获取键仍然应该是枚举。
是否有任何解决方法?
答案 0 :(得分:1)
此代码:
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'}