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
关键改动说明
- 补充构造函数参数:给
Wizard的构造函数添加name和level参数,确保能获取父类构造所需的值。 - 正确传递
super()参数:用构造函数接收的name和level作为super()的入参,完成父类实例属性的初始化。 - 匹配实例化参数:实例化时传入三个参数,与构造函数的参数定义一一对应。
内容的提问来源于stack exchange,提问作者Routfin
相关产品推荐
相关产品推荐

