我创建了这样一个类
@Injectable FooService {
constructor(protected _bar:BarService){
}
}
并像这样扩展它
@Injectable ExtFooService extends FooService {
constructor(_bar:BarService){
super(_bar);
}
}
但后来我像这样扩展了BarService
@Injectable ExtBarService extends BarService {
public myBarVar = "myBarVar";
constructor(){
super();
}
}
现在在这里
@Injectable ExtFooService extends FooService {
constructor(_bar:ExtBarService){
super(_bar);
}
someMethod(){
return {
key: this._bar.myBarVar
};
}
}
但是我收到以下错误:
错误:(51,28)TS2551:Property' myBarVar'在类型' BarService'。
上不存在
ExtBarService 被迫 BarService ,因为超类想要...... 我有可能这样做吗?
@Injectable ExtFooService extends FooService {
constructor(_bar:BarService, private _extBar: ExtBarService){
super(_bar);
}
someMethod(){
return {
key: this._extBar.myBarVar
};
}
}
答案 0 :(得分:1)
您无法覆盖private
字段,但无论如何您无法从派生类访问该字段,因此我不确定您从何处收到错误,但我和#39;猜测这不是你的完整代码。
最简单的解决方案是制作字段protected
。它不能从外部访问,它可以从派生类访问,并且您可以使用派生服务覆盖该类型而不会出现错误:
@Injectable class FooService {
constructor(protected _bar:BarService){
}
}
@Injectable class ExtFooService extends FooService {
constructor(protected _bar:ExtBarService){
super(_bar);
}
someMethod(){
return {
key: this._bar.myBarVar
};
}
}