Javascript 操作对象数组时发生TS2345错误

Javascript 操作对象数组时发生TS2345错误,javascript,arrays,typescript,Javascript,Arrays,Typescript,假设我有这样一个数组: let arr = [{field: ["alice"]}, {field : ["bob", "charlie"]} 我希望能够在不编写嵌套的for循环的情况下压缩所有值。 到目前为止,我已经做到了: arr.reduce((a, b) => a.field.concat(b.field)) 我看到的问题是,数组的类型,比如说,arr:array,在映射或类似操作时发生了更改 我收到一个TS2345错误 …不可分配给类型为 为了澄清问题,结果应该与下面的结果相

假设我有这样一个数组:

let arr = [{field: ["alice"]}, {field : ["bob", "charlie"]}
我希望能够在不编写嵌套的
for
循环的情况下压缩所有值。 到目前为止,我已经做到了:

arr.reduce((a, b) => a.field.concat(b.field))
我看到的问题是,数组的类型,比如说,
arr:array
,在映射或类似操作时发生了更改

我收到一个TS2345错误

…不可分配给类型为

为了澄清问题,结果应该与下面的结果相同

let result = [];
for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr[i].field.length; j++) {
        result.push(arr[i].field[j])
    }
}
let result=[];
for(设i=0;i
很抱歉,我无法共享我的真实代码,但这正是问题所在。
由于某些原因,这在Chrome的开发人员工具上有效,但在我尝试编译代码时无效。

那么,结果将是:

["alice", "bob", "charlie"]
当我认为你想要的时候:

[{fields: ["alice", "bob", "charlie"] }]
这将通过以下公式计算:

[{ fields: arr.reduce((a, b) => a.field.concat(b.field)) }]

结果是:

["alice", "bob", "charlie"]
当我认为你想要的时候:

[{fields: ["alice", "bob", "charlie"] }]
这将通过以下公式计算:

[{ fields: arr.reduce((a, b) => a.field.concat(b.field)) }]
const-arr:Array=[{field:[“alice”]},{field:[“bob”,“charlie”]}];
常量结果:Array=arr.map(obj=>obj.field)
.减少((a,b)=>a.concat(b));
const-arr:Array=[{field:[“alice”]},{field:[“bob”,“charlie”]}];
常量结果:Array=arr.map(obj=>obj.field)
.减少((a,b)=>a.concat(b));

关键是一个名称列表数组与一个包含一个对象、一个参数“fields”的数组的区别,后者包含一个名称列表数组。很抱歉,可能是您在未显示的代码中已经说明的内容。假设数组中的对象是模型/类。我不明白这是怎么回事。我试过了。重点是一个名称列表数组与一个包含一个对象的数组的区别,一个参数“fields”,它包含一个名称列表数组。很抱歉,可能是您在未显示的代码中已经说明的内容。假设数组中的对象是模型/类。我不明白这是怎么回事。我试过了。只是想澄清一下,你添加的for循环已经被验证有效了,对吗?问题在于TS编译reduce函数的方式是否相同?循环是否有效,是的。导致此问题的原因是,在一次合并之后,数组[0]的类型与其他数组不同,因此下一次reduce调用根本不具备类型安全性。通过使用之前的映射,我们选择每个项作为所需的类型,然后对所有项调用一个函数只是为了澄清一下,您添加的for循环已被验证有效,对吗?问题在于TS编译reduce函数的方式是否相同?循环是否有效,是的。导致此问题的原因是,在一次合并之后,数组[0]的类型与其他数组不同,因此下一次reduce调用根本不具备类型安全性。通过使用之前的映射,我们选择每个项目作为所需的类型,然后在所有项目上调用一个函数非常感谢