Reactjs TypeScript/React中的枚举索引签名

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

我似乎不知道如何在这里正确地键入索引签名。我有一个枚举,需要遍历它以在屏幕上放置一些JSX。我可以猜出它告诉我什么,但我无法在我的代码中解决它。
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,
}