如何基于通用类型“ T”初始化TypeORM存储库?

时间:2019-06-23 00:08:18

标签: typescript generics typeorm

我想基于通用类型初始化TypeORM存储库。

例如:

import { Connection, Repository } from 'typeorm';

export class GenericService<T> {
    private repository: Repository<T>;

    constructor(connection: Connection) {
        this.repository = connection.getRepository(T);
        // 'T' only refers to a type, but is being used as a value here.ts(2693)
    }

    public async list(): Promise<T[]> {
        return await this.repository.find();
    }

}

但是我无法将通用类型传递给ORM存储库工厂。

  

'T'仅指类型,但在此处用作值。ts(2693

如何根据通用类型创建此通用服务?

PS。我正是用C#做到了这一点,并且就像一个魅力。它节省了我很多时间

2 个答案:

答案 0 :(得分:2)

您不能在Typescript中将类型用作值,因此需要使用泛型来对值进行类型检查:

import { Connection, Repository } from 'typeorm';

export class GenericService<T> {
   private repository: Repository<T>;

   constructor(connection: Connection, repo: T) {
      this.repository = connection.getRepository(repo);
   }

   public async list(): Promise<T[]> {
      return await this.repository.find();
   }

}

答案 1 :(得分:0)

我使用EntityTarget类型来避免此错误。代码如下:

import { Connection, Repository, EntityTarget } from 'typeorm';

export class GenericService<T> {
   private repository: Repository<T>;

   constructor(connection: Connection, repo: EntityTarget<T>) {
      this.repository = connection.getRepository<T>(repo);
   }

   public async list(): Promise<T[]> {
      return await this.repository.find();
   }

}