Я пытаюсь создать базовый сервис, который будет расширяться.Служба принимает универсальный тип, который будет типом Entity, который использует typeorm, у этого типа должно быть несколько реквизитов, и поэтому я хочу расширить интерфейс с такими реквизитами:
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>
?
Я просто хочу убедиться, что универсальный тип пользователя, по крайней мере, имеет реквизиты в UserInterface.
Здесьмой пользовательский интерфейс:
import { BaseEntity } from "typeorm";
export interface UserInterface extends BaseEntity {
id: number;
}