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

TypeScript:Object.fromEntries为何不接受元组数组入参?

问题根因

你的代码错误来源于对Array.forEach()方法的误用:
forEach()方法执行后返回值为void(无返回值),因此你赋值给aa变量的实际是空值,自然无法传入Object.fromEntries()方法使用——该方法要求入参必须是可迭代的键值对元组数组,和你预期的“把回调返回的[key,1]收集成数组”的效果完全不符。

修复方案

将forEach替换为Array.map()方法即可:map()会自动把每一轮回调的返回值收集为新数组返回,刚好符合你构造元组数组的需求。

const [itemsWithSelection, setItemsWithSelection] = useState<{ [formFieldId: string]: number }>(itemsWithSelection2)
if (!itemsWithSelection2) {
  // forEach替换为map,可选加as const收窄类型避免严格TS配置报错
  const aa = Object.keys(invoiceItems).map((key) =>
    [key, 1] as const
  )
  setItemsWithSelection(Object.fromEntries(aa))
}
补充说明

如果你的TS配置开启了严格类型校验,不加as const的话[key,1]会被推断为(string | number)[]类型,可能依旧会触发类型不匹配报错;添加as const后该值会被TS识别为只读的[string, number]元组,完全匹配Object.fromEntries的入参类型要求。

内容的提问来源于stack exchange,提问作者János

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:06:00