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

Prisma update调用中解构对象后追加字段时类型检查失效问题

问题诱因

该问题是旧版Prisma的类型定义缺陷+TypeScript默认类型校验规则共同导致的:

  1. 你使用的prisma@3.5.0属于较老的版本,生成的ORM操作类型没有引入Exact类型工具做严格校验,默认只会检查传入对象是否包含目标模型允许的字段,不会主动拦截多余的非法字段。
  2. TypeScript默认仅对纯对象字面量做严格的多余属性检查,当你在对象中使用展开运算符(...)展开未显式标注类型的params对象时,若后面追加了合法字段(比如示例中的verified: true),TS会将整个data对象推断为同时包含非法字段和合法字段的普通对象,旧版Prisma的宽松类型会判定该对象符合输入要求,直接跳过非法字段的校验。
解决方法

可按优先级选择以下方案:

  • 升级Prisma版本:将prisma和@prisma/client都升级到4.x及以上的稳定版,新版本默认启用严格的输入类型校验,即使对象包含展开操作、追加合法字段,也会主动识别并抛出非法字段的类型错误。
  • 给动态参数添加显式类型约束:如果暂时无法升级Prisma版本,给所有用于更新的参数对象显式标注Prisma自动生成的输入类型,非法字段会在参数定义阶段就触发类型报错:
import { Prisma } from '@prisma/client'

// 显式标注类型后,incorrect_param会直接提示类型错误
const params: Prisma.identity_document_verificationUpdateInput = {incorrect_param: true};
  • 给update操作的完整入参加类型约束:也可以直接对整个update方法的入参做类型标注,强制触发严格校验:
import { Prisma } from '@prisma/client'

const updateOpts: Prisma.identity_document_verificationUpdateArgs = {
  where: { id },
  data: {
    ...params,
    verified: true
  }
}
const data = await prisma.identity_document_verification.update(updateOpts);
  • 强化TypeScript校验规则:确保tsconfig.json中开启strict: true配置,开启后会进一步收紧TS的类型检查逻辑,减少隐式类型绕过校验的可能性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:06:04