我对TypeScript比较陌生。我需要实现两个共享一个共同功能和状态的路径保护。
当我尝试使用构造函数扩展可注入类时,生成的类不会接收私有成员的实例。
受挫的例子:
// guard-base.ts
@Injectable()
export abstract class GuardBase {
constructor(
private sharedState: SharedState,
) {}
sharedMethod(): boolean {. . .}
}
// authentication-required.guard.ts
@Injectable()
export class RouteGuard extends GuardBase implements CanActivate {
canActivate(): Promise<boolean> {
console.log(this);
// this.sharedState equals undefined at this point
}
}
我是否必须在RouteGuard
类中提供构造函数参数?我想要做的是封装基类上的所有导入和共享方法。那可能吗?如果没有,那么实现我想做的最好的方法是什么?
答案 0 :(得分:1)
即使是其他语言也希望您为新类提供一个新的构造函数(包含参数),然后将这些参数传递给父类的构造函数以执行您要求的操作。 http://www.c-sharpcorner.com/UploadFile/5089e0/how-to-use-super-keyword-in-typescript/
使用super(sharedState)
将sharedState
参数从子项传递到父级构造函数。
如果要从父类访问成员变量,请使用protected
而不是private
。