Javascript 在typescript中反转枚举
我有下一个代码:Javascript 在typescript中反转枚举,javascript,typescript,Javascript,Typescript,我有下一个代码: enum MyEnum{ 颜色='AreColors', Cars='AreCars', } const menuTitle=((对象:MyEnum)=>{ const newObj={}; Object.keys(obj.forEach)(x)=>{ newObj[obj[x]]=x; }); 返回newObj; });您的代码有几个问题: 如果要通过传入MyEnum作为对象来反转枚举的键值对,则需要使用obj:typeof MyEnum。这是假设您希望使用menuTitl
enum MyEnum{
颜色='AreColors',
Cars='AreCars',
}
const menuTitle=((对象:MyEnum)=>{
const newObj={};
Object.keys(obj.forEach)(x)=>{
newObj[obj[x]]=x;
});
返回newObj;
});代码>您的代码有几个问题:
如果要通过传入MyEnum
作为对象来反转枚举的键值对,则需要使用obj:typeof MyEnum
。这是假设您希望使用menuTitle(MyEnum)
执行反转
Object.keys(obj)
将返回字符串数组,这会导致枚举出现索引问题。如果您将它强制转换为MyEnum类型的keyof数组,那么它将工作
改进代码:
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));
enum MyEnum{
颜色='AreColors',
Cars='AreCars',
}
const menuTitle=((obj:typeof MyEnum)=>{
const newObj:{[key in MyEnum]?:keyof typeof MyEnum}={};
(Object.keys(obj)作为数组).forEach((x)=>{
newObj[obj[x]]=x;
});
返回newObj;
});
log(menuTitle(MyEnum));
请参阅上的概念验证示例。您的代码有几个问题:
如果要通过传入MyEnum
作为对象来反转枚举的键值对,则需要使用obj:typeof MyEnum
。这是假设您希望使用menuTitle(MyEnum)
执行反转
Object.keys(obj)
将返回字符串数组,这会导致枚举出现索引问题。如果您将它强制转换为MyEnum类型的keyof数组,那么它将工作
改进代码:
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));
enum MyEnum{
颜色='AreColors',
Cars='AreCars',
}
const menuTitle=((obj:typeof MyEnum)=>{
const newObj:{[key in MyEnum]?:keyof typeof MyEnum}={};
(Object.keys(obj)作为数组).forEach((x)=>{
newObj[obj[x]]=x;
});
返回newObj;
});
log(menuTitle(MyEnum));
请参见上的概念验证示例