正确处理来自Typescript中REST api调用的枚举
我们有一个RESTAPI,它为给定字段返回一个字符串,但我们知道这个字符串实际上是我们在Typescript中创建的枚举 我们的枚举看起来是这样的正确处理来自Typescript中REST api调用的枚举,typescript,Typescript,我们有一个RESTAPI,它为给定字段返回一个字符串,但我们知道这个字符串实际上是我们在Typescript中创建的枚举 我们的枚举看起来是这样的 export enum Enum1 { RED = 'Red', GREEN = 'Green', BLUE = 'Blue' } 我们遇到的问题是,在比较Typescript时,后端返回红色,而使用红色,因此下面的比较 myResp.myField === Enum1.RED 工作不正常。在T
export enum Enum1 {
RED = 'Red',
GREEN = 'Green',
BLUE = 'Blue'
}
我们遇到的问题是,在比较Typescript时,后端返回红色
,而使用红色
,因此下面的比较
myResp.myField === Enum1.RED
工作不正常。在Typescript中处理这种情况的适当方法是什么?Typescript将比较枚举的值,而不是枚举的名称与
myResp.myField
进行比较。在运行时,枚举将转换为一个对象,该对象按如下方式初始化:
function (Enum1) {
Enum1["RED"] = "Red";
Enum1["GREEN"] = "Green";
Enum1["BLUE"] = "Blue";
}
因此,当与Enum1进行比较时。红色
您将与字段的值进行比较,即红色
最简单的解决方案是将枚举的值设置为与名称相同
export enum Enum1 {
RED = 'RED',
GREEN = 'GREEN',
BLUE = 'BLUE '
}
当在ui上呈现时,它们会很可怕,有没有更好的选择?@Edmondo1984取决于你愿意改变什么。您可以将测试更改为
Object.keys(Enum1).includes(myResp.myField)
。另外,将myField
的类型更改为不是枚举值而是枚举的键myField:keyof typeof Enum1
您不应将枚举的索引值用于显示目的,即将其拆分为RED={value:'RED',label:'RED}
或将枚举索引映射到单独对象中的标签。