您所做的是定义Form 有一个名为constructor 的属性,它是一个Form 构造函数(即返回Form 的新实例的函数)。
为了解释,请考虑以下几点:
class Form {}
type FormConstructor = { new(): Form };
let formCtor: FormConstructor = Form;
let form: Form = new formCtor();
您也可以通过这种方式定义静态属性/函数:
class Form {
private dump: string;
constructor() {}
static fromDump(dump: string): Form {
let form = new Form();
form.dump = dump;
return form;
}
}
type FormConstructor = {
new(): Form;
fromDump: (dump: string) => Form;
};
let form1: Form = new Form();
let form2: Form = Form.fromDump("dump");
let formCtor: FormConstructor = Form;
let form3: Form = new formCtor();
let form4: Form = formCtor.fromDump("dump");
Array (lib.ts & lib.es6.ts) 和 ArrayConstructor (lib.d.ts & lib.es6.d.ts) 就是一个很好的例子。
在你的情况下,虽然我没有看到这样做的原因,你可能只想定义一个类构造函数:
interface Form {
dump: string;
}
class MyForm implements Form {
dump: string;
constructor(dump: string) {
this.dump = dump;
}
}
你不需要在接口中指定实现类需要有一个ctor,这是给定的。
编辑
如果该界面是自动生成的,那么您需要停止使用生成它的任何东西,因为它做得很糟糕。
该接口(我很确定)不可能实现,这里有一些接近的东西:
interface _Form {
Dump:string;
}
interface Form extends _Form { ctor:{ new():Form }; }
class MyForm implements Form {
public ctor: { new():Form };
public Dump: string;
constructor() {
this.ctor = MyForm;
}
}
(code in playground)
除了我将它从 constructor 更改为 ctor 之外,它完全一样,它编译得很好(尽管它仍然没有意义)。
如果你把ctor改成constructor:
class MyForm implements Form {
public constructor: { new():Form };
public Dump: string;
constructor() {
this.constructor = MyForm;
}
}
您会收到错误,因为 constructor 类(这是一个关键字)必须是一个函数,并且只有一个使用该名称的函数。