我正在尝试提供可扩展的基本服务。该服务采用通用类型,该类型将是typeorm使用的Entity类型,该类型必须具有一些道具,因此我希望它扩展具有这些道具的接口:
import { getManager, FindConditions, Repository } from "typeorm";
import { UserInterface } from "./user.interface";
export abstract class UserService<User extends UserInterface> {
constructor(
private readonly User: new () => User,
protected readonly userRepository: Repository<User>,
) {}
async findAll(): Promise<User[]> {
return await this.userRepository.find();
}
abstract async findOnePopulated(where: FindConditions<User>): Promise<User>;
async findOneById(id: number): Promise<User> {
return await this.findOnePopulated({ id });
}
async updateUser(userId: number): Promise<User> {
const em = getManager();
const user = await this.userRepository.findOne(userId);
await em.update(this.User, userId, user);
return user;
}
}
此呼叫findOnePopulated({ id })
上出现类型错误
[ts] Argument of type '{ id: number; }' is not assignable to parameter of type
'FindConditions<User>'. [2345]
,此em.update(this.User, userId, user)
也显示类型错误:
[ts]
Argument of type 'User' is not assignable to parameter of type 'QueryDeepPartialEntity<User>'.
Type 'UserInterface' is not assignable to type 'QueryDeepPartialEntity<User>'. [2345]
如果我将所有User
都切换到UserInterface
上似乎没有显示任何错误,那么使用语法<User extends UserInterface>
是否有问题?
我只想确保通用User类型至少在UserInterface中具有道具。
这是我的UserInterface:
import { BaseEntity } from "typeorm";
export interface UserInterface extends BaseEntity {
id: number;
}
答案 0 :(得分:0)
花点时间解决这个问题,但我猜想您的UserInterface
是造成这些问题的原因。您没有名为“用户”的实体吗? UserInterface
是否具有类型为id
的密钥number
?您是否已宣布UserInterface
是Entity
?如果您可以提供UserInterface
,请再看一看,但我猜是因为它不是实体@Entity()
,因此未在typeorm的实体管理器中注册