gpt4 book ai didi

Typescript - 映射集合以向其添加属性以更改其中对象的类型。如何?

转载 作者:行者123 更新时间:2023-12-05 05:06:35 24 4
gpt4 key购买 nike

我有一个类型为 X 的对象集合,我想将它们转换为类型 Y。类型 X 和 Y 是相同的,除了类型 Y 有一些额外的属性。因此,我使用 .map 遍历数组并分配缺失的属性。

然而,这会抛出 TypeScript - 它无法识别 map 函数中的代码正在添加它所提示的缺失属性:

“UnProcessedType”类型中缺少属性“propName”,但在“ProcessedType”类型中是必需的。

这是一个playground example的情况。

代码:

type UnProcessedType = {
ab: string,
cd: string,
};

type ProcessedType = {
ab: string,
cd: string,
ef: string,
};

const col: UnProcessedType[] = [{ ab: 'a', cd: 'd' }, { ab: 'b', cd: 'd' }, { ab: 'b', cd: 'c' }];

const processedCol: ProcessedType[] = col.map(el => {
el.ef = 'e';
return el;
});

console.log(processedCol); // All properties there as expected

在这种情况下使用 Typescript 的常规方法是什么?在此先感谢您提供任何指导/提示!

最佳答案

除非您的代码对性能非常关键,否则我只会复制未处理的对象,并添加新属性。这可以通过对象传播优雅地完成:

const processedCol: ProcessedType[] = col.map(el => ({ ...el, ef: 'f' }));

这还有一个好处是不会导致输入数组发生突变。将使用 map 的函数式风格与改变输入的命令式风格混合在一起可能会有点困惑。

关于Typescript - 映射集合以向其添加属性以更改其中对象的类型。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59782977/

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