我想传递类的类型信息,暗示编译器给定的参数不是类的实例而是类定义。我怎么能这样做?
import * as Routes from '../routes';
import * as Entities from '../entities';
export class RouteManager {
public router = Router();
private connection = getConnectionManager().get();
constructor() {
this.addRoute(Routes.VideoRoute, Entities.Video);
}
addRoute(routeClass: AbstractRoute<AbstractEntity>, entity: AbstractEntity): void {
const instance = new routeClass(entity, this.connection.getRepository(entity))
this.router.get(instance.route, instance.find);
}
}
这里编译器抱怨new routeClass(entity, this.connection.getRepository(entity))
行,因为它认为routeClass
是AbstractRoute<AbstractEntity>
的实例而不是导出的类定义。
我尝试过使用AbstractRoute<AbstractEntity>.constructor
但是Typescript似乎并不知道这种结构。
答案 0 :(得分:5)
这个语法看起来有点奇怪。基本上,您定义了一个使用new(...args: any[]) => T
之类的签名。您当然可以更严格,将T
替换为您的班级,将args
替换为constructor
签名。
我会推荐这样的东西:
class Foo {}
type Constructor<T> = new(...args: any[]) => T;
function createFoo(thing: Constructor<Foo>) { return new thing(); }