在Prisma + NestJS中,带UserSelect的Promise应使用什么类型?
解决Prisma动态Select的返回类型推导问题
你可以借助Prisma内置的Prisma.UserGetPayload类型,结合泛型来实现动态select对应的返回类型推导:
async getOneUser<T extends Prisma.UserSelect>( where: Prisma.UserWhereUniqueInput, userSelect?: T ): Promise<Prisma.UserGetPayload<{ select: T }>> { const user = await this.prisma.user.findUnique({ where, select: userSelect || undefined }) return user }
关键说明:
- 泛型
T约束为Prisma.UserSelect,让TypeScript能捕获传入的userSelect的具体字段结构 Prisma.UserGetPayload<{ select: T }>会根据T的结构自动生成对应的返回类型- 若需要不传
userSelect时默认返回完整User类型,可以给泛型设置默认值:
async getOneUser<T extends Prisma.UserSelect = Prisma.UserSelect>( where: Prisma.UserWhereUniqueInput, userSelect?: T ): Promise<Prisma.UserGetPayload<{ select: T }>> { const user = await this.prisma.user.findUnique({ where, select: userSelect }) return user }
内容的提问来源于stack exchange,提问作者D Kramer
相关产品推荐
相关产品推荐

