javascript - 反转打字稿中的枚举
问题描述
我有下一个代码:
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;
。
为什么会出现问题以及如何解决?
解决方案
您的代码有几个问题:
- 如果你想通过作为对象传入来反转枚举的键值对
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上的概念验证示例。
推荐阅读
- javascript - 存根推送器(事件)Javascript
- android - 如何使用service获取打开了哪个app的信息?
- php - 在 Laravel 5 中使用 get()
- python - 如何在不规则物体内部生成随机点和格点?
- .net-core - grpc .net-core 应用程序在本地外部不可见
- node.js - createReadStream() 如何在 aws-sdk 中工作?
- php - 在 Laravel 中将对象转换为关联数组
- ionic-framework - 如何更改 ion-select 的默认警报弹出窗口的样式?
- swift - Swift 5:不推荐使用 String.UTF16View.Index(encodedOffset: l)
- android - GraphHopper 错误:在版本 1 中使用了编码器汽车,但当前版本是 2