数组转换为Person类实例对象后调用方法报Is not a function错误
错误根因
- 核心错误出在
b的生成逻辑中:你创建了Person实例后,没有直接把实例存入结果对象,而是存入了一个包含name、age、city三个属性的普通数组。数组本身没有定义tellUsAboutYourself方法,调用时自然会抛出类型错误。 - 额外的类型校验失效问题:你为
b标注的类型是键对应Person实例的对象,但因为reduce累加器被你显式标注为any,跳过了TypeScript的类型检查,才让这个类型不匹配的问题没有在编译阶段暴露,留到了运行时才触发报错。
修复方案
修改reduce中的赋值逻辑,直接存储Person实例即可,同时可以去掉错误的any类型标注,启用TS类型校验避免后续同类问题:
export const b: B = a.reduce(function (value: B, [name, age, city]) { let persona = new Person(name, age, city); // 直接存入Person实例,不要转成数组 value[persona._id] = persona return value; // 初始化累加器时做类型断言,保证类型校验生效 }, {} as B);
修改后b的每个值都是完整的Person类实例,遍历调用tellUsAboutYourself方法即可正常运行。
内容的提问来源于stack exchange,提问作者Ramil Tsulini
相关产品推荐
相关产品推荐

