【发布时间】:2021-09-15 11:22:56
【问题描述】:
我正在尝试将类数组转换为以类名作为对象键的对象。所以;
我有一个类数组:
const renderers = [
Battery,
Kind
]
我想转换成如下对象:
{
Battery: Battery,
Kind: Kind
}
为此,我使用reduce 来获取对象:
const convertedObject = renderers.reduce((acc, renderer) => {
acc[renderer.name] = renderer;
return acc;
}, {});
所以convertedObject 现在的类型为{}。我希望这个类型是{ Battery: typeof Battery, Kind: typeof Kind}(这样我就可以使用keyof typeof 来创建一个带有字符串值的类型。)
我知道如何通过type RendererType = typeof renderers[0] 获取数组的类型,这让我得到typeof Battery | typeof Kind。然后在减速器中我可以这样做:
renderers.reduce<{[x: string]: RendererType }>((acc, renderer) => {
acc[renderer.name] = renderer;
return acc;
}, {});
所以现在,convertedObject 的类型为 { [x: string]: typeof Battery | typeof Kind },ok。但我宁愿它是我之前描述的对象。
我试过了
renderers.reduce<{[K in keyof RendererType]: RendererType }>((acc, renderer) => {
acc[renderer.name] = renderer;
return acc;
}, {});
然后我得到{ prototype: typeof Battery | typeof Kind }
有没有办法通过 Typescript 获得我需要的类型?
【问题讨论】:
-
你们有没有找到解决办法?
标签: typescript