如何解决如何使用枚举在TS中实现反向映射
所以我有一个带有字符串索引的枚举
enum MyEnum {
str = "string"
}
console.log(MyEnum['str']); // string
console.log(MyEnum['string']); // undefined
我希望能够通过值即得到
console.log(MyEnum['string']); // str
但是它给了我undefined
。有办法实现吗?
这是我的尝试
export enum EventType {
JOB = "job"
}
type EventTypeKey = keyof typeof EventType;
const EVENT_TYPE_KEYS = new Map<EventType,EventTypeKey>(
Object.entries(EventType).map(([key,value]: [EventTypeKey,EventType]) => [
value,key
])
);
但是TS编译器给了我一些神秘的编译错误
解决方法
这里有一些代码可以满足您的需求:
enum MyEnum {
str = "string"
}
console.log(MyEnum['str']); // string
console.log((Object.keys(MyEnum)).find(key => (MyEnum as any)[key] == 'string')); // str
,
@basarat使用Object.keys
是因为Object.keys
的参数类型是对象,枚举确认了这一点。
因此您可以在枚举上使用Object.keys。
但是Object.entries
的参数类型严格是键值对,该枚举未得到确认。
所以您不能在枚举上使用Object.entries。
Read more about enum on typescript docs
根据op的要求,这是他的解决方案,没有类型错误
const EVENT_TYPE_KEYS = new Map<EventType,EventTypeKey>(
Object.keys(EventType).map((key: EventTypeKey) => [
EventType[key],key
])
)
,
我认为问题是由于
(1)EventTypeKey类型和
(2)new Map<EventTypeKey,EventTypeValue>
和.map
方法的类型必须具有相同的类型。
尝试以下
enum EventType {
JOB = "job"
}
type EventTypeKey = string;
type EventTypeValue = string;
const EVENT_TYPE_KEYS = new Map<EventTypeKey,EventTypeValue>(
Object.entries(EventType).map(([key,value]: [EventTypeKey,EventTypeValue]) => [
value,key
])
);
console.log(EVENT_TYPE_KEYS.get("job"));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。