You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Prisma关联findUnique查询时TS类型不匹配,如何解决?

解决Prisma查询返回类型与UserGetPayload不兼容的问题

问题原因

你用Prisma.UserGetPayload生成的类型包含了Prisma为关联字段自动添加的懒加载查询方法(比如currentStates()),但实际执行带include的查询后,返回的currentStates是已加载的数组,两者类型不匹配,导致TS2322错误。

推荐解决方案:用Prisma.GetReturnType推导精确类型

直接基于你的查询配置,使用Prisma.GetReturnType生成和实际返回结果完全匹配的类型,这是最准确且无需手动维护的方式:

// 定义你的查询配置,并通过satisfies约束类型
const userQueryOptions = {
  where: { id: userId },
  include: {
    currentStates: {
      include: { state: true },
    },
  },
} satisfies Prisma.UserFindUniqueArgs;

// 基于查询方法和配置,推导精确返回类型
type UserWithCurrentStates = Prisma.GetReturnType<
  typeof prisma.user.findUnique,
  typeof userQueryOptions
>;

// 现在可以正常使用该类型
type InnerContextProps = {
  user: UserWithCurrentStates | null;
};

备选方案:手动修正UserGetPayload类型

如果坚持使用UserGetPayload,可以手动覆盖关联字段的类型,替换掉Prisma的懒加载方法:

type UserWithCurrentStates = Omit<
  Prisma.UserGetPayload<{
    include: { currentStates: { include: { state: true } } };
  }>,
  'currentStates'
> & {
  currentStates: Array<Prisma.CurrentStateGetPayload<{ include: { state: true } }>>;
};

这种方法需要手动维护关联字段的类型,不如第一种方案灵活。

内容的提问来源于stack exchange,提问作者Alan Sikora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 21:30:03