在函数参数中传递用户定义的类型

时间:2019-11-21 07:15:59

标签: javascript typescript

我有一个type定义如下:

export type KlassConstructor = new (...args: any[]) => Klass;

还有另一个B类中的构造函数,如下所示:

constructor(name: string, options?: any, construct?: KlassConstructor) {
  //
  if(construct)
  {
    (this.attr).state = new (construct)();
  }
  //
}

我需要通过传递construct参数的B进行初始化。我想知道如何传递导出类型中定义的args来初始化类Klass

3 个答案:

答案 0 :(得分:0)

B类希望“ construct”参数是KlassConstructor的一个实例。

因此,在调用B的构造函数之前,您可以创建KlassConstructor的实例。然后将其关联到B的构造方法中。

赞:

KlassConstructor k = new KlassConstructor(1,2,3);
B b = new B('name', {}, k);

我相信您也可以随时随地进行操作,例如:

B b = new B('name', {}, new KlassConstructor(1,2,3));

此外,我不确定它是否适用,但是如果一个类继承自另一个类,则可以使用super()函数:

https://www.typescriptlang.org/docs/handbook/classes.html

答案 1 :(得分:0)

或者,您可以传递args,然后初始化KClass

constructor(name: string, options?: any,...args: any[]) {
 KlassConstructor k = new KlassConstructor(args);
}

答案 2 :(得分:0)

我尝试做new KlassContructor(args),但这给了我这个错误:

  

KlassConstructor仅引用类型,但被用作值   在这里。

我想出了使用通过引用文档here定义的类型初始化B的方法。 B可以通过执行new B(Klass)来初始化,或者如果您想扩展类Klass则可以通过执行以下操作来初始化:

let construct: KlassConstructor = class extends Klass {
    public _tag: string;
    constructor(...args: any[], tag: string) {
        super(args);
        this._tag = tag;
    }
};

var b = new B(construct);