Reactjs TypeScript/React中的枚举索引签名
我似乎不知道如何在这里正确地键入索引签名。我有一个枚举,需要遍历它以在屏幕上放置一些JSX。我可以猜出它告诉我什么,但我无法在我的代码中解决它。Reactjs TypeScript/React中的枚举索引签名,reactjs,typescript,index-signature,Reactjs,Typescript,Index Signature,我似乎不知道如何在这里正确地键入索引签名。我有一个枚举,需要遍历它以在屏幕上放置一些JSX。我可以猜出它告诉我什么,但我无法在我的代码中解决它。Category[el]语句都是问题所在 export enum Category { All = 'ALL', Employee = 'EMPLOYEE', Gear = 'GEAR', Room = 'ROOM', Other = 'OTHER', } 我用于呈现某些JSX的简化函数是: const
Category[el]
语句都是问题所在
export enum Category {
All = 'ALL',
Employee = 'EMPLOYEE',
Gear = 'GEAR',
Room = 'ROOM',
Other = 'OTHER',
}
我用于呈现某些JSX的简化函数是:
const renderCategories = (): ReactElement | ReactElement[] => {
return Object.keys(Category).map(el => {
return (
<Option key={el} value={Category[el]}>
<span>{` (${someOtherData.filter((e) => e.type === Category[el].length})`}</span>
</Option>
);
});
};
您可以将以下索引签名添加到枚举:
export enum Category {
All = 'ALL',
Employee = 'EMPLOYEE',
Gear = 'GEAR',
Room = 'ROOM',
Other = 'OTHER',
[key: string]: string,
}
此用例在使用
对象.keys
时非常常见,它总是将每个键推断为字符串
,这与类似枚举
的键或具有特定类型的对象不兼容
但Typescript仍然允许我们将每个键转换为一个类型,这意味着我们只需转换回上面枚举的类型
以下是反映上述解释的片段:
导出枚举类别{
All='All',
Employee='Employee',
齿轮='齿轮',
房间=‘房间’,
其他='其他',
}
//用于检测枚举类型的公共类型
类型EnumType=类别的类型;
类型EnumKeyType=EnumType的键;
//然后回到我们想要的类型
someOtherData.filter((e)=>e.type==Category[el as EnumKeyType].length)//将`el强制转换为EnumKeyType`
不幸的是,我不能这样做,因为我在最后一行遇到了以下错误:枚举成员必须具有初始值设定项。枚举中不允许使用ts(1061)计算属性名。ts(1164)重复标识符“字符串”。ts(2300)啊,我明白了,这实际上可能是此的重复:谢谢,我可以发誓我试过keyof typeof,但它成功了。谢谢
export enum Category {
All = 'ALL',
Employee = 'EMPLOYEE',
Gear = 'GEAR',
Room = 'ROOM',
Other = 'OTHER',
[key: string]: string,
}