例如,以下内容不会编译(link to typescript playground example):
declare class ClassFactory {
constructor();
new(): any;
}
const User = new ClassFactory();
const user = new User();
结果错误:
Cannot use 'new' with an expression whose type lacks a call or construct signature.
我需要额外的注释吗?我如何声明MetaClass?我假设new(): any;
被认为是类的原型方法,因此是实例构造模式。
编辑:固定链接
答案 0 :(得分:4)
他们是可能的。这是一个简单的例子:
declare class User{}
declare interface ClassFactory {
new(): typeof User;
}
declare var ClassFactory: ClassFactory;
const UserClass = new ClassFactory();
const user = new UserClass(); // user has type `User`
new
调用此内容将返回”您无法使用class
。因此interface ClassFactory
var ClassFactory
class
而不是实例,你不能做: User
,你需要获得类的类型。因此typeof User
。 这里使用的一个关键概念是声明空间。这包括在内:https://basarat.gitbooks.io/typescript/content/docs/project/declarationspaces.html