与我读过的所有内容相反,我似乎无法扩展基类需要注入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,无论出于何种原因,它都会破坏父类。
感谢任何帮助。感谢。
答案 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);
}
}