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

TypeScript类继承中super调用报错问题求助

解决TypeScript子类调用super()的参数错误问题

你的错误和readonly修饰符无关,核心问题是子类构造函数未正确接收父类所需参数,也未将这些参数传递给super(),同时实例化时的参数与构造函数定义不匹配。

具体错误原因

  • Wizzard类的构造函数仅声明了cajado参数,但调用super(name, level)时,name和level这两个变量在当前作用域未定义,导致TS报错找不到变量。
  • 实例化new Wizzard('Ray', 8)时传入了两个参数,但构造函数仅接受一个,参数数量不匹配。

修正后的代码

class Character {
    public readonly name: string;
    public readonly level: number;

    constructor(name: string, level: number) {
        this.name = name;
        this.level = level;
    }

    walk() {
        return `${this.name} walking!`
    }

    showMyLevel() {
        return `${this.name} has the level ${this.level}`
    }
}

// 修正类名拼写(Wizzard → Wizard,符合英文规范)
class Wizard extends Character {
    private readonly cajado: string;

    // 构造函数补充父类所需的name、level参数,加上自身的cajado
    constructor(name: string, level: number, cajado: string) {
        // 将接收的name和level传递给super,完成父类属性初始化
        super(name, level);
        this.cajado = cajado;
    }

    fireBall() {
        return `${this.name} fire ball!`
    }
}

// 实例化时传入对应参数:name、level、cajado
const wizard1 = new Wizard('Ray', 8, '橡木法杖');

console.log(wizard1.fireBall()); // 输出:Ray fire ball!
console.log(wizard1.showMyLevel()); // 输出:Ray has the level 8

关键改动说明

  1. 补充构造函数参数:给Wizard的构造函数添加name和level参数,确保能获取父类构造所需的值。
  2. 正确传递super()参数:用构造函数接收的name和level作为super()的入参,完成父类实例属性的初始化。
  3. 匹配实例化参数:实例化时传入三个参数,与构造函数的参数定义一一对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 03:15:27