我有一个定义文件:
interface _Form {
Dump:string;
}
interface Form extends _Form { constructor:{ new():Form }; }
constructor:{ new():Form };
是什么意思?
如果我尝试使用此实现此接口:
class MyForm implements Form {
Dump:string;
}
我收到此错误:
Class'MyForm'错误实现了接口'Form' 属性“构造函数”的类型是不兼容的 类型'功能'不能分配给'new()=>类型表”。
“函数”类型不匹配签名'new():Form'
答案 0 :(得分:0)
您所做的是定义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");
一个很好的例子是数组(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;
}
}
除了我将它从constructor
更改为ctor
之外,它完全相同,并且它编译得很好(尽管它仍然没有意义)。
如果您将ctor
更改为constructor
:
class MyForm implements Form {
public constructor: { new():Form };
public Dump: string;
constructor() {
this.constructor = MyForm;
}
}
你会得到错误,因为类constructor
(这是一个关键字)需要是一个函数,只有一个使用该名称。