首页 文章

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

提问于
浏览
0

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

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 回答

  • 4

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

    我会推荐这样的东西:

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

相关问题