我正在尝试将枚举值字符串转换为实际的枚举。我知道您可以比较一个字符串并使用它完成操作(例如,MyEnum.FirstEnum ==='My_First_Enum'将返回true),但是如果我可以返回枚举而不是字符串,那就太好了。
export enum MyEnum {
FirstEnum = 'My_First_Enum',
SecondEnum = 'My_Second_Enum',
ThirdEnum = 'My_Third_Enum'
}
getMyEnums(): MyEnum[] {
// These would be an input argument, but for the sake of this example, I thought this was easier to understand
const stringEnumValues = ['My_Second_Enum', 'My_Third_Enum'];
// Convert to enums (result is [undefined, undefined])
return stringEnumValues.map(e => MyEnum[e]);
}
答案 0 :(得分:2)
您需要将字符串强制转换为枚举类型的键,这是如何通过代表枚举键的字符串数组和代表值的字符串数组来实现的:
通过键获取:
getMyEnums(): MyEnum[] {
const stringEnumValues = ['SecondEnum', 'ThirdEnum'];
return stringEnumValues.map( (e : keyof typeof MyEnum) => MyEnum[e])
}
通过值获取:
getMyEnums2(): MyEnum[] {
const stringEnumValues = ['My_First_Enum', 'My_Second_Enum'];
return stringEnumValues.map( (e : MyEnum) => e)
}
示例:https://stackblitz.com/edit/angular-yd6yhe?file=src/app/app.component.ts
来源:https://blog.mikeski.net/development/javascript/typescript-enums-to-from-string/
答案 1 :(得分:2)
尝试使用Object.entries
方法,然后使用filter
输入您想要的值stringEnumValues
,然后使用map
过滤值:
const stringEnumValues = ['My_Second_Enum', 'My_Third_Enum'];
let result = Object.entries(MyEnum)
.filter(([k,v])=> stringEnumValues.includes(v))
.map(([ke, vl]) => MyEnum[ke]);
答案 2 :(得分:0)
为什么不为此目的尝试冻结的JSON哈希?
export const MyEnum = Object.freeze({
'FirstEnum': 'My_First_Enum',
'SeconfEnum': 'My_Second_Enum',
'ThirdEnum': 'My_Third_Enum',
'My_First_Enum': 'FirstEnum',
'My_Second_Enum': 'SeconfEnum',
'My_Third_Enum': 'ThirdEnum'
});