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
};
}
}
我创造了这样一个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
};
}
}