TypeScript类继承调用super提示未提供参数TS2554报错
报错根因
TypeScript类继承规则要求:子类构造函数调用super()时,入参必须完全匹配直接父类的构造函数参数定义,这个规则和父类内部如何调用它自身的父类构造没有关联。
你的代码里:
Dog的直接父类是Enemy,Enemy的构造函数明确定义需要2个入参:texture: PIXI.Texture、game: Game- 但
Dog里写的super(texture)只传入了1个参数,缺失了要求的game参数,因此触发Expected 2 arguments, but got 1.ts(2554)报错。
你之前尝试修改Enemy类内部的super()调用、给PIXI.Sprite传2个参数的方向完全错误:Enemy的直接父类是PIXI.Sprite,它的构造函数仅支持0-1个入参,给它传2个参数自然触发参数过多的报错,问题根本不出在Enemy和PIXI.Sprite的继承环节。
修复方法
只需要修改Dog类里的super()调用,把Enemy构造函数要求的两个参数完整传入即可,修复后的Dog类代码如下:
export class Dog extends Enemy { constructor(texture: PIXI.Texture, game: Game) { // 传入Enemy构造所需的全部2个参数 super(texture, game); // 无需额外写this.game = game,Enemy构造中已经完成该属性赋值,Dog可直接继承使用 } }
额外注意
如果修改代码后报错没有消失,优先检查两个点:
- 是否改错了文件(你之前已经出现过这类操作失误),确认当前编辑的是项目实际引用的类文件
- TS服务缓存了旧的类型信息,重启IDE或者TS语言服务即可刷新校验结果
内容的提问来源于stack exchange,提问作者marry
相关产品推荐
相关产品推荐

