我想基于通用类型初始化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#做到了这一点,并且就像一个魅力。它节省了我很多时间
答案 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();
}
}