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
相关产品推荐
相关产品推荐

