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

TypeScript中如何一步遍历对象数组获取ID数组与Count总和及正确类型

解决方法

首先纠正你代码里的两个问题:

  • 你写的({id: any})是错误语法,这里的any会被当成变量名而非类型标注,相当于把id重命名为any,完全没必要。TypeScript能自动推断id和count的类型,不需要用any。
  • 你的箭头函数语法不完整,缺少闭合的括号,正确写法不需要额外的类型标注。

1. 替代any的正确类型处理

你可以给数据元素定义明确的接口,让类型更清晰,彻底避免any:

// 定义数组元素的类型
interface DataItem {
  id: number;
  count: number;
}

// 给data数组指定类型
const data: DataItem[] = [
    { id: 1, count: 3 },
    { id: 2, count: 5 },
];

后续使用map或reduce时,TypeScript会自动识别id和count都是number类型。如果不想额外定义接口,TypeScript也能根据数组字面量自动推断类型,直接写原始data数组同样没问题。

2. 一步获取ids数组和count总和

用Array.reduce()可以只遍历一次数组,同时完成ids收集和count求和,比先map再reduce更高效:

const { ids, sum } = data.reduce(
  (acc, { id, count }) => {
    acc.ids.push(id);
    acc.sum += count;
    return acc;
  },
  // 初始化累加器:空ids数组和初始总和0
  { ids: [] as number[], sum: 0 }
);

console.log(ids); // [1, 2]
console.log(sum); // 8

如果想更明确指定累加器类型,可用泛型写法:

const { ids, sum } = data.reduce<{ ids: number[]; sum: number }>(
  (acc, { id, count }) => {
    acc.ids.push(id);
    acc.sum += count;
    return acc;
  },
  { ids: [], sum: 0 }
);

补充:分开处理的正确写法

如果还是想分开用map和reduce,正确代码如下(无需any):

const ids = data.map(({ id }) => id);
const sum = data.reduce((total, { count }) => total + count, 0);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:50:28