我想使用我在下面撰寫的通用類創建一個基礎服務:
import { BaseEntity } from './base.entity';
import { Repository } from 'typeorm';
export class BaseService<Entity extends BaseEntity> {
constructor(private entitiesRepository: Repository<Entity>) {}
findById(id: number): Promise<Entity> {
return this.entitiesRepository.findOneBy({ id });
}
}
當我嘗試它時,我收到以下錯誤:
Argument of type '{ id: number; }' is not assignable to parameter of type 'FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[]'.
Types of property 'id' are incompatible.
Type 'number' is not assignable to type 'FindOptionsWhereProperty<NonNullable<Entity["id"]>>'
這是我的基礎物體類:
// base.entity.ts
import {
Column,
PrimaryGeneratedColumn,
CreateDateColumn,
UpdateDateColumn,
} from 'typeorm';
export class BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column({ default: false })
isDeleted: boolean;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}
我該如何解決這個問題?
uj5u.com熱心網友回復:
以上答案都沒有解決這個問題。我在 TypeORM GitHub 上發現了一個與此問題相關的未解決問題。
現在,我用any
type 修復了這個問題。我知道它并不完美,但它現在正在作業。我期待任何其他解決方案。
import { BaseEntity } from './base.entity';
import { Repository } from 'typeorm';
export class BaseService<Entity extends BaseEntity> {
constructor(private entitiesRepository: Repository<Entity>) {}
findById(id: any): Promise<Entity> {
return this.entitiesRepository.findOneBy({ id });
}
}
uj5u.com熱心網友回復:
我認為您使用的是過時的 typeorm 版本。findOneBy 在最近的版本中已被棄用和洗掉。
更新 typeorm 并試試這個:
findById(id: number): Promise<Entity> {
return this.entitiesRepository.findOne(id);
}
uj5u.com熱心網友回復:
您需要按照檔案中的說明裝飾您的 BaseEntity 類 @Entity(): https ://docs.nestjs.com/techniques/database#repository-pattern
// base.entity.ts
import {
Entity,
Column,
PrimaryGeneratedColumn,
CreateDateColumn,
UpdateDateColumn,
} from 'typeorm';
@Entity()
export class BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column({ default: false })
isDeleted: boolean;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}
uj5u.com熱心網友回復:
我在這里不是專家,但我認為打字稿抱怨 BaseEntity 沒有擴展 ObjectLiteral:
https://github.com/typeorm/typeorm/blob/master/src/repository/Repository.ts#L22 https://github.com/typeorm/typeorm/blob/master/src/common/ObjectLiteral.ts
我認為您需要做的就是添加“擴展 ObjectLiteral”并將相應的匯入添加到 BaseEntity。
像:
import { ObjectLiteral } from 'typeorm';
進而:
export class BaseEntity extends ObjectLiteral {
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470423.html
上一篇:Kotlin流出泛型