Prisma update调用中解构对象后追加字段时类型检查失效问题
问题诱因
该问题是旧版Prisma的类型定义缺陷+TypeScript默认类型校验规则共同导致的:
- 你使用的prisma@3.5.0属于较老的版本,生成的ORM操作类型没有引入
Exact类型工具做严格校验,默认只会检查传入对象是否包含目标模型允许的字段,不会主动拦截多余的非法字段。 - 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
相关产品推荐
相关产品推荐

