gpt4 book ai didi

typescript - typeorm 和 nestjs 中的通用类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:56:27 32 4
gpt4 key购买 nike

我正在尝试制作一个可扩展的基础服务。该服务采用通用类型,这将是 typeorm 使用的实体类型,该类型必须具有一些 Prop ,因此我希望它扩展具有这些 Prop 的接口(interface):

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 中的属性。

这是我的用户界面:

import { BaseEntity } from "typeorm";

export interface UserInterface extends BaseEntity {
id: number;
}

最佳答案

我花了一些时间来解决这个问题,但我猜你的 UserInterface 是造成这些问题的原因。您没有一个名为 User 的实体吗? UserInterface 是否具有类型为 number 的键 id?您是否已声明 UserInterface 是一个 Entity?如果你能提供你的 UserInterface 我会再看看,但我的猜测是因为它不是一个实体 @Entity() 因此没有在 typeorm 的实体管理器等中注册

关于typescript - typeorm 和 nestjs 中的通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54761269/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com