Angular 5 Class extends class with extended injections

Angular 5 Class extends class with extended injections

我创造了这样一个class

@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
        };
    }
}

但我收到以下错误:

Error:(51, 28) TS2551:Property 'myBarVar' does not exist on type 'BarService'.

这就像 ExtBarService 被迫 BarService 因为超级 class 想要... 我有可能必须这样做吗?

@Injectable ExtFooService extends FooService {

    constructor(_bar:BarService, private _extBar: ExtBarService){
        super(_bar);
    }

    someMethod(){
        return {
            key: this._extBar.myBarVar
        };
    }
}

您无法覆盖 private 字段,但无论如何您都无法从派生的 class 访问该字段,所以我不确定您从哪里得到错误,但我我猜这不是您的完整代码。

最简单的解决方案是创建字段 protected。它不能从外部访问,它可以从派生 classes 访问,并且您可以使用派生服务覆盖类型而不会出错:

@Injectable class FooService {
    constructor(protected _bar:BarService){
    }
}

@Injectable class ExtFooService extends FooService {
    constructor(protected  _bar:ExtBarService){
        super(_bar);
    }

    someMethod(){
        return {
            key: this._bar.myBarVar
        };
    }
}