Angular 5 Class通过延长注射扩展了类

时间:2018-03-16 10:21:22

标签: typescript dependency-injection angular5 extends

我创建了这样一个类

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

1 个答案:

答案 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
        };
    }
}