使用@Inject和Angular 2

时间:2016-10-29 02:43:04

标签: angular typescript

与我读过的所有内容相反,我似乎无法扩展基类需要注入OpaqueToken引用的类。

示例:

@Component({})
export class StructureBase_Cmp {
    constructor(private constants:App_Const){
    }
}

在此示例中,App_Const来自模块中提供的OpaqueToken:

providers: [
    {provide: App_Const, useValue: Constants}
],

我知道无论出于什么原因你需要调用@Inject,因此将第一个例子更改为:

@Component({})
export class StructureBase_Cmp {
    constructor(@Inject(App_Const) private constants){
    }
}

这很好用。什么不能正常工作是试图扩展该类,因为它抱怨"私有常量"派生类中的类型不同:

@Component({})
export class Hero_Cmp extends StructureBase_Cmp{
    constructor(@Inject(App_Const) protected constants) {
        super(constants);
    }
}

但是,我无法将超类更改为:

@Component({})
export class StructureBase_Cmp {
    constructor(private constants:App_Const){
    }
}

因为....什么,App_Const是一个OpaqueToken而不是一个定义的类型?尽管有文档,我仍然非常困惑,因为这种感觉就像开箱即用一样。

tldr: 我想扩展一个需要从OpaqueToken派生的注入项的类,但是为了这样做,我需要在派生类上使用@Inject,无论出于何种原因,它都会破坏父类。

感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:2)

我想说这个问题与角度和IoC无关。它只是一个打字稿编译器检查(observe it here):

export class StructureBase_Cmp {
    constructor(private constants){
    }
}

export class Hero_Cmp extends StructureBase_Cmp{
    constructor(protected constants) {
        super(constants);
    }
}

会产生错误:

  

Class' Hero_Cmp'错误地扩展了基类' StructureBase_Cmp'。
  财产'常数'属于' StructureBase_Cmp'但不是   输入' Hero_Cmp'。 Hero_Cmp类

因为父级有 private 属性,而小孩 protected 。这没有意义。

只是让它受到保护

export class StructureBase_Cmp {
    constructor(protected constants){ // also protected
    }
}

export class Hero_Cmp extends StructureBase_Cmp{
    constructor(protected constants) {
        super(constants);
    }
}