【问题标题】:Reverse an enum in typescript [duplicate]反转打字稿中的枚举[重复]
【发布时间】:2021-08-09 22:36:02
【问题描述】:
我有下一个代码:
enum MyEnum {
Colors = 'AreColors',
Cars = 'AreCars',
}
const menuTitle = ((obj: MyEnum) => {
const newObj = {};
Object.keys(obj).forEach((x) => {
newObj[obj[x]] = x;
});
return newObj;
});
在这里,我想更改枚举键来代替枚举值。
这样做我得到Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}' 这里newObj[obj[x]] = x;。
为什么会出现问题以及如何解决?
【问题讨论】:
标签:
javascript
typescript
【解决方案1】:
你的代码有几个问题:
- 如果你想通过传入
MyEnum作为对象来反转枚举的键值对,那么你需要使用obj: typeof MyEnum。这是假设您想使用menuTitle(MyEnum) 来执行反转。
-
Object.keys(obj) 将返回一个字符串数组,这会导致您的枚举出现索引问题。如果您将其转换为 keyof typeof MyEnum 的数组,那么它将起作用。
改进的代码:
enum MyEnum {
Colors = 'AreColors',
Cars = 'AreCars',
}
const menuTitle = ((obj: typeof MyEnum) => {
const newObj: { [key in MyEnum]?: keyof typeof MyEnum } = {};
(Object.keys(obj) as Array<keyof typeof MyEnum>).forEach((x) => {
newObj[obj[x]] = x;
});
return newObj;
});
console.log(menuTitle(MyEnum));
请参阅TypeScript Playground 上的概念验证示例。