我有一个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
。
答案 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()函数:
答案 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);