我正在尝试扩展基类并得到以下错误:
类“derivedProduct”错误地扩展了基类“baseProduct”。
类型具有私有属性“route”的单独声明。
基类:
export class BaseProduct {
constructor(private route: ActivatedRoute, private store: Store<fromState>){}
}
派生类:
export class DerivedProduct extends BaseProduct {
constructor(private route: ActivatedRoute, private store: Store<fromState>){}
}
为什么我会犯这个错误?
最佳答案
这些字段已经在基类中声明,因此不需要重新声明它们(即不需要指定修饰符)。构造函数参数应该只是派生类中的参数,而不是字段中的参数。您还需要调用super
构造函数
export class BaseProduct {
constructor(private route: ActivatedRoute, private store: Store<fromState>) { }
}
export class DerivedProduct extends BaseProduct {
constructor(route: ActivatedRoute, store: Store<fromState>) {
super(route, store)
}
}
注意,可以使用构造函数参数向字段语法糖添加额外的字段,但基本字段通常不应重新声明。公共字段和受保护字段如果被声明,通常不会引起问题,但不能被声明为私有字段。
如果要从派生类访问这些字段,请在基类中将修饰符更改为
protected
或public
。编辑
正如@series0ne指出的,如果构造器没有任何额外的逻辑,则可以将其全部省略,因为它将从基类继承:
export class BaseProduct {
constructor(private route: ActivatedRoute, private store: Store<fromState>) { }
}
export class DerivedProduct extends BaseProduct {
}
new DerivedProduct(route, store); //Works, also Angular should see it like this as well.