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

如何为Prisma通用更新函数的model与params添加TypeScript类型?

为Prisma通用更新函数添加TypeScript类型安全

要给这个通用更新函数实现类型安全,核心是利用Prisma自带的类型系统,通过泛型绑定模型与对应的更新参数类型,具体有两种常见实现方式:

方式一:基于Prisma模型名称的精准绑定

直接借助Prisma提供的ModelName和Args类型,明确关联模型实例与更新参数的类型:

import { Prisma, PrismaClient } from '@prisma/client';

const updateModel = async <T extends Prisma.ModelName>(
  // 模型实例类型:对应PrismaClient的模型属性类型
  model: PrismaClient[T],
  // 更新参数类型:绑定对应模型的update方法参数
  params: Prisma.Args<T, 'update'>
) => {
  await model.update(params);
};

这种方式类型提示最精准:当传入prisma.user作为model时,params会自动校验where条件(必须包含User模型的唯一标识字段)和data字段(只能是User模型允许更新的字段),编译阶段就能拦截错误。

方式二:基于方法签名的通用适配

如果不想依赖Prisma的模型名称枚举,也可以通过提取模型update方法的参数类型实现适配:

const updateModel = async <T extends { update: (args: any) => Promise<any> }>(
  model: T,
  // 提取update方法的第一个参数类型
  params: Parameters<T['update']>[0]
) => {
  await model.update(params);
};

这种方式更通用,只要对象有符合签名的update方法就能适配,同样能获得对应的类型校验能力。

效果示例

当调用updateModel(prisma.post, { where: { id: 1 }, data: { title: '新标题' } })时:

  • 如果where传入Post模型不存在的字段(比如nonExistentId),TypeScript会直接报错
  • 如果data传入不允许更新的字段(比如createdAt),也会触发编译错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:12:20