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

