正确处理来自Typescript中REST api调用的枚举

正确处理来自Typescript中REST api调用的枚举,typescript,Typescript,我们有一个RESTAPI,它为给定字段返回一个字符串,但我们知道这个字符串实际上是我们在Typescript中创建的枚举 我们的枚举看起来是这样的 export enum Enum1 { RED = 'Red', GREEN = 'Green', BLUE = 'Blue' } 我们遇到的问题是,在比较Typescript时,后端返回红色,而使用红色,因此下面的比较 myResp.myField === Enum1.RED 工作不正常。在T

我们有一个RESTAPI,它为给定字段返回一个字符串,但我们知道这个字符串实际上是我们在Typescript中创建的枚举

我们的枚举看起来是这样的

 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}
或将枚举索引映射到单独对象中的标签。