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

TypeScript报错:表达式类型any无法索引类型{}问题排查

TypeScript reduce生成字符串索引对象报错解决

你遇到的错误核心原因是:reduce的初始值{}被TypeScript默认推断为空对象类型{},这个类型没有定义字符串索引签名,所以当你尝试用bar.barId(即使转成string)作为索引给它赋值时,TS无法确认这个对象支持字符串索引,就会抛出类型错误。

两种解决方法:

方法1:给初始值做类型断言

直接把初始值{}断言为你定义的Bars接口类型,告诉TS这个累加器就是符合要求的索引对象:

const bars = barsResponse.bar.reduce((acc, bar) => {
    acc[bar.barId as string] = bar.myVal;
    return acc;
}, {} as Bars);

方法2:给reduce指定泛型类型

通过泛型明确reduce的累加器类型为Bars,TS会自动识别初始值{}符合该类型:

const bars = barsResponse.bar.reduce<Bars>((acc, bar) => {
    acc[bar.barId as string] = bar.myVal;
    return acc;
}, {});

额外注意

如果bar.myVal的类型不是string,你还需要把它转换为string类型(比如bar.myVal as string),否则会触发“类型不兼容”的新错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:45:59