【问题标题】:DRYing up an Angular2 TypeScript Class干燥 Angular2 TypeScript 类
【发布时间】:2017-02-07 19:11:28
【问题描述】:

我对 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 类中提供构造函数参数吗?我想做的是将所有导入和共享方法封装在基类上。那可能吗?如果没有,完成我想做的事情的最佳方法是什么?

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    甚至其他语言也希望您为新类提供一个新的构造函数(带有参数),然后将这些参数传递给父类的构造函数以执行您所要求的操作。 http://www.c-sharpcorner.com/UploadFile/5089e0/how-to-use-super-keyword-in-typescript/

    使用super(sharedState)sharedState 参数从子级传递到父级的构造函数。

    如果要从父类访问成员变量,请使用protected 而不是private

    【讨论】:

    • 明白了。唔。我希望有一些更优雅的东西。扩展非抽象类时会遇到同样的问题吗?
    • @Brandon- 是的,这对所有类都是一样的,无论是抽象的还是具体的。
    • 感谢您的帮助。它不像我以前写的 Python 那样 DRY,但它会工作 :)
    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多