我正在尝试从Class本身的方法创建一个构造函数的新实例。在编译的JS中它可以工作,但在TS中我得到错误cannot use new with an expression whose type lacks a call or construct signature
。
为了解释这个问题,我将简化课程:
class Saver {
toSave: { obj1 : Object, obj2 ?: Object };
constructor(obj : { obj1 : Object, obj2 ?: Object }) {
this.toSave = obj;
return this;
}
prepare() {
if(obj.obj2) new Saver(obj.obj2).save(); // here I get the error
return this;
}
save() {
// I do stuff
}
}
var testObj = { obj1 : aFakeObject, obj2 : anotherFakeObj };
new Saver(testObj).prepare().save();
在*.d.ts
文件中:
export interface construct {}
export interface SaverConstruct extends construct {
new(obj ?: { obj1 : Object, obj2 ?: Object });
}
class Saver {
constructor();
private prepare() : void;
public save() : void;
}
我已经使用这个逻辑很长一段时间了,所以我非常有信心在JS中这是可能的。如何在TS中正确实现它?