【问题标题】:Angular 5 Class extends class with injectionsAngular 5 Class 通过注入扩展类
【发布时间】:2018-03-16 10:03:24
【问题描述】:

我创建了这样一个类

@Injectable FooService {

    constructor(private _bar:BarService){

    }
}

并像这样扩展它

@Injectable ExtFooService extends FooService {

    constructor(private _bar:BarService){
        super(_bar);
    }
}

这样我得到以下错误:

错误:(12, 14) TS2415:Class 'ExtFooService' 错误地扩展了基类 'FooService'。类型具有私有属性“_bar”的单独声明。

为什么会这样?

我尝试从 ExtFooService 中删除注入,但我在 super() 行得到了这个:

错误:(21, 9) TS2554:Expected 2 arguments, but got 0.

我真的有必要这样做吗?

@Injectable ExtFooService extends FooService {

    constructor(private _extBar:BarService){
        super(_extBar);
    }
}

【问题讨论】:

    标签: typescript dependency-injection angular5 extends


    【解决方案1】:

    您应该从派生类中的参数_bar 中删除privateprivate 是声明与构造函数参数同名的字段并使用参数值对其进行初始化的简写。由于基类已经声明了该字段,因此无需在派生类中重新声明:

    @Injectable ExtFooService extends FooService {
    
        constructor(_bar:BarService){
            super(_bar);
        }
    }
    

    【讨论】:

    • 这不会公开 _bar 吗?
    • @TonySamperi 如果您希望参数成为公共字段,则必须显式添加public。如果你不指定任何修饰符,它只是一个构造函数参数而不是类成员
    • 酷。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多