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

时间:2017-04-25 09:36:45

标签: 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);
  }
}

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

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

1 个答案:

答案 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(); }