如何让自定义Prisma查询函数返回正确的关联类型?
解决Prisma自定义查询函数的类型推断问题
问题出在直接使用Prisma.UserFindFirstArgs作为参数类型时,TypeScript无法关联传入的include/select配置与返回类型。要实现和原生prisma.user.findFirst一致的类型推断,只需给函数添加泛型,复用Prisma内置的类型工具即可:
修改后的函数代码:
import { Prisma } from '@prisma/client'; import prisma from './path-to-your-prisma-instance'; export async function retrieveUser<T extends Prisma.UserFindFirstArgs>( userConditions: T ): Promise<Prisma.UserGetPayload<T>> { return await prisma.user.findFirst(userConditions); }
调用时,TypeScript会自动根据传入的配置推断返回类型:
const user = await retrieveUser({ include: { bar: true } }); // 此时user.bar的类型会被正确识别,不再报错
原理说明:
- 泛型
T extends Prisma.UserFindFirstArgs约束参数必须符合UserFindFirstArgs的结构,同时保留传入的具体配置细节 Prisma.UserGetPayload<T>是Prisma提供的工具类型,它会根据T中的include/select等配置,生成对应的用户实体类型,完全复用Prisma自动生成的类型系统,无需硬编码任何字段或关联关系。
内容的提问来源于stack exchange,提问作者LnrdRmj
相关产品推荐
相关产品推荐

