gpt4 book ai didi

typescript 将数组转换为具有指定类型的对象

转载 作者:搜寻专家 更新时间:2023-10-30 21:12:10 28 4
gpt4 key购买 nike

我正在尝试将类数组转换为以类名作为对象键的对象。所以;

我有一组类:

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 |类型。然后在 reducer 中我可以这样做:

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 |类型

有没有办法通过 Typescript 以某种方式获得我需要的类型?

最佳答案

function b<K extends string>(...keys: K[]) : { [T in K]: string }
{
const init = {} as { [T in K]: string }
return keys.reduce((a, v) => ({ ...a, [v]: 'label'}), init);
}
var l = b('key1', 'key2');
console.log(l.key1, l.key2);

也许这就是你想要的。

关于 typescript 将数组转换为具有指定类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48429008/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com