继承AddClinicComponent时super构造函数传参问题:需传何参数?能否免传?
解决Angular子类继承时super()的MatDialog传参问题
报错原因
你调用super(MatDialog)时传入的是MatDialog类本身(类型为typeof MatDialog),但父类AddClinicComponent的构造函数需要的是已经实例化的MatDialog对象,因此出现类型不匹配的报错。
正确传参方式
子类需要通过Angular的依赖注入获取MatDialog实例,再将该实例传给super():
父类示例(AddClinicComponent)
import { MatDialog } from '@angular/material/dialog'; export class AddClinicComponent { // 用protected修饰,确保子类能访问该依赖 constructor(protected dialog: MatDialog) {} }
子类示例
import { MatDialog } from '@angular/material/dialog'; import { AddClinicComponent } from './add-clinic.component'; export class SubClinicComponent extends AddClinicComponent { // 子类构造函数声明MatDialog依赖,Angular自动注入实例 constructor(dialog: MatDialog) { // 将注入得到的实例传给父类 super(dialog); } }
免传参数的实现方式
如果不想在子类构造函数中显式传递MatDialog参数,可以利用Angular的继承式依赖注入特性:
方式1:省略子类构造函数
如果子类不需要自定义构造逻辑,直接省略构造函数即可,Angular会自动处理父类的依赖注入:
import { AddClinicComponent } from './add-clinic.component'; export class SubClinicComponent extends AddClinicComponent { // 无需构造函数,父类依赖自动注入 }
方式2:利用扩展运算符传递参数
如果子类需要自定义构造函数但不需要额外依赖,可以用扩展运算符接收父类的依赖参数,再传递给super():
import { AddClinicComponent } from './add-clinic.component'; export class SubClinicComponent extends AddClinicComponent { constructor(...args: any[]) { super(...args); // 这里可以添加子类的构造逻辑 } }
内容的提问来源于stack exchange,提问作者3gwebtrain
相关产品推荐
相关产品推荐

