打字稿:将动态数据传递给扩展类

时间:2019-03-29 14:18:37

标签: typescript

我想知道是否有人可以提供帮助?

我有一个需要从3rdparty扩展的类。扩展时,我需要动态传递数据-因此,这是一个类

class AuthGuardNew extends AuthGuard("Needs changing") {


}

所以我想做的就是这样

new AuthGuardNew("Something different")

在幕后会将“某些不同”传递给扩展类,而不是“需要更改”

如果我使用类似的构造函数

constructor(type:string) {

}

但是我已经扩展了该如何将其传递给AuthGuard?

有什么想法吗?

预先感谢

更新

如果我尝试做

export class AuthGuardNew extends AuthGuard {
  constructor(type?: string) {
    super(type)
  }

我收到一个打字稿错误,指出这一点

  

Type'(type ?: string | undefined)=> Type'不是   构造函数类型。

2 个答案:

答案 0 :(得分:0)

您只需在构造函数中调用super即可。

class AuthGuardNew extends AuthGuard {
    constructor(type: string) {
        super(type);
    }
}

答案 1 :(得分:0)

长话短说,就是你做不到。 AuthGuard是创建类而不是类的函数。在您知道type的值之前,没有任何类可以扩展。

相反,一旦知道type的值,您就可以创建一个构造类的新函数。

const AuthGuardNew = (type?: string) =>
    class extends AuthGuard(type || 'Needs changing') { 
        // You are free to override anything you need, you are defining a class
        myExtension(): number {
            return 10;
        }
    }

AuthGuardNew还是一个创建类而不是类的函数。

const SomethingDifferentAuthGuard = AuthGuardNew('Something different');

// SomethingDifferentAuthGuard is now a class that extends AuthGuard('Something different') 
// so we can instantiate and use it as such
console.log(new SomethingDifferentAuthGuard().myExtension())