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

数组转换为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:45:03