MikroORM:如何将通用 findOne 与 BaseEntity 一起使用?
MikroORM: How to use generic findOne with BaseEntity?
我们正在使用 MikroORM,并希望在我们的 NestJS 项目中使用一些基本方法创建一个 BaseRepo。这样做我们 运行 遇到了 findOne 方法的问题。这是我们的代码:
BaseRepo.ts
export class BaseRepo<T extends BaseEntity> {
constructor(protected readonly em: EntityManager) {}
async findOneById(id: string): Promise<T> {
const entity = await this.em.findOne(T, id); // ts complains here
return entity;
}
}
BaseEntity.ts
export abstract class BaseEntity {
@PrimaryKey()
_id!: ObjectId;
@SerializedPrimaryKey()
id!: string;
}
TypeScript 在 findeOne 的 T 参数上给我们以下错误:'T' only refers to a type, but is being used as a value here.ts(2693).
所以 TypeScript 似乎无法将 T 识别为实体。有什么办法让它起作用吗?
您需要使用值,而不是类型。类型在运行时不存在,您需要一个运行时值。基本存储库应包含实体名称,您应该使用它。
export class BaseRepo<T extends BaseEntity> {
constructor(protected readonly em: EntityManager, protected entityName: EntityName<T>) {}
async findOneById(id: string): Promise<T> {
const entity = await this.em.findOne(this.entityName, id);
return entity;
}
}
我们正在使用 MikroORM,并希望在我们的 NestJS 项目中使用一些基本方法创建一个 BaseRepo。这样做我们 运行 遇到了 findOne 方法的问题。这是我们的代码:
BaseRepo.ts
export class BaseRepo<T extends BaseEntity> {
constructor(protected readonly em: EntityManager) {}
async findOneById(id: string): Promise<T> {
const entity = await this.em.findOne(T, id); // ts complains here
return entity;
}
}
BaseEntity.ts
export abstract class BaseEntity {
@PrimaryKey()
_id!: ObjectId;
@SerializedPrimaryKey()
id!: string;
}
TypeScript 在 findeOne 的 T 参数上给我们以下错误:'T' only refers to a type, but is being used as a value here.ts(2693).
所以 TypeScript 似乎无法将 T 识别为实体。有什么办法让它起作用吗?
您需要使用值,而不是类型。类型在运行时不存在,您需要一个运行时值。基本存储库应包含实体名称,您应该使用它。
export class BaseRepo<T extends BaseEntity> {
constructor(protected readonly em: EntityManager, protected entityName: EntityName<T>) {}
async findOneById(id: string): Promise<T> {
const entity = await this.em.findOne(this.entityName, id);
return entity;
}
}