如何在Typescript中将类定义指定为参数类型

NoN*_*ded 1 typescript

我想传递类的类型信息,并提示编译器给定的参数不是类的实例,而是类的定义。我怎样才能做到这一点?

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

在这里,编译器抱怨该new routeClass(entity, this.connection.getRepository(entity))行,因为它认为这routeClass是该行的实例,AbstractRoute<AbstractEntity>而不是其导出的类定义。

我尝试使用,AbstractRoute<AbstractEntity>.constructor但是Typescript似乎不知道这种结构。

Seb*_*ald 7

这个语法看起来有点奇怪。基本上,您定义的签名使用new(...args: any[]) => T。当然,你可以通过更换更严格的T与你的类和argsconstructor签名。

我建议这样的事情:

class Foo {}
type Constructor<T> = new(...args: any[]) => T;

function createFoo(thing: Constructor<Foo>) { return new thing(); }
Run Code Online (Sandbox Code Playgroud)