的阵列时,假设我有一个数组,看起来像:TS2345错误操作对象
let arr = [{field: ["alice"]}, {field : ["bob", "charlie"]}
我希望能够Concat的所有值,而无需编写嵌套循环for
。 我到目前为止已经做到了这一点:
arr.reduce((a, b) => a.field.concat(b.field))
的问题,因为我看到这一点,该阵列的类型,可以说arr : Array<MyObject>
,改变当映射或类似的东西。
即时得到一个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])
}
}
对不起,我不能分享我的真实代码,但这是确切的问题。 由于某些原因,这对Chrome的开发人员工具有效,但在尝试编译我的代码时无法使用。
只是为了:
这与计算澄清,您添加的for循环已验证可以正常工作,对吧?问题在于TS编译reduce函数是以同样的方式工作吗?是的,这个循环的作用是 – Katana314
。这个问题是由于在一次concatanation之后数组[0]与其他数据类型不同而造成的,所以下一次reduce调用根本不会是类型安全的。通过使用Map之前,我们选择每个项目是所需的类型,然后调用所有这些函数 –