You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript使用reduce遍历对象数组提取属性时类型报错如何解决

问题原因

你代码的问题出在reduce回调函数的返回值类型不符合要求:
reduce要求回调函数每次返回的值的类型,必须和初始值(你这里初始是AnyType['name'][]数组类型)完全一致。你之前直接返回b.name是单个的'A'|'B'|'C'字符串类型,和数组类型不匹配,所以触发类型报错。

修复方案

方案1:修正reduce回调逻辑

你需要把当前遍历到的name推入累计的数组,再返回整个数组即可:

const namesArray = myArray.reduce<AnyType['name'][]>((acc, cur) => {
  acc.push(cur.name);
  return acc;
}, []);

如果你偏好无突变的写法,也可以用数组解构:

const namesArray = myArray.reduce<AnyType['name'][]>((acc, cur) => [...acc, cur.name], []);

方案2:更适配场景的map写法

如果只是单纯提取数组所有元素的某一个属性组成新数组,map方法比reduce更简洁,也不需要手动声明泛型就能正确推断类型:

const namesArray = myArray.map(item => item.name);

TypeScript会自动推断namesArray的类型就是('A'|'B'|'C')[],完全符合需求。

内容的提问来源于stack exchange,提问作者Yoel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:45:03