我对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
类中提供构造函数参数?我想做的是将所有导入和共享方法封装在基类上。这可能吗?如果没有,完成我想做的事情的最佳方式是什么?
甚至其他语言也希望您为新类提供一个新的构造函数(包括参数(,然后将这些参数传递到父类的构造函数中以执行您所询问的操作。 http://www.c-sharpcorner.com/UploadFile/5089e0/how-to-use-super-keyword-in-typescript/
使用 super(sharedState)
将 sharedState
参数从子级传递到父级的构造函数中。
如果要从父类访问成员变量,请使用 protected
而不是 private
。