Prisma原子更新操作传入undefined报错,与TypeScript类型定义冲突
Prisma原子操作传undefined报错问题
问题本质
这是Prisma 2.28.0的类型定义与运行时校验不一致的bug,和数据库配置无关。TypeScript类型里IntFieldUpdateOperationsInput的increment等字段标记为可选(支持undefined),但实际运行时Prisma会拒绝这种参数。
临时解决办法
调用更新接口前,先把值为undefined的原子操作字段过滤掉,避免触发错误:
const someQuantity: number | undefined = undefined; const client = new PrismaClient(); await client.someEntity.update({ where: { id: 1 }, data: { quantity: Object.fromEntries( // 只保留有有效值的操作 Object.entries({ increment: someQuantity }).filter(([_, val]) => val !== undefined) ) } });
或者更直观的条件判断写法:
const updateOps: IntFieldUpdateOperationsInput = {}; if (someQuantity !== undefined) { updateOps.increment = someQuantity; } // 确保有合法操作才执行更新,避免空操作报错 if (Object.keys(updateOps).length > 0) { await client.someEntity.update({ where: { id: 1 }, data: { quantity: updateOps } }); }
后续建议
- 优先考虑升级到Prisma 3.x及以上版本,这个问题在后续版本中已经被修复。
- 如果无法升级,去Prisma官方GitHub仓库提交bug报告,说明你使用的版本、复现步骤,以及类型定义和运行时行为矛盾的点。
内容的提问来源于stack exchange,提问作者Filly
相关产品推荐
相关产品推荐

