Prisma(TypeScript)能否生成不含自动生成字段的Schema类型?
Prisma自动生成不含自增ID的创建类型方案
Prisma会自动生成适配创建操作的专用类型,无需手动编写独立DTO来维护单一数据源。
核心解决方案:使用Prisma内置的CreateInput类型
Prisma Client为每个Model生成了对应的创建输入类型,命名规则为[ModelName]CreateInput,比如你的User模型对应的UserCreateInput。这个类型会自动排除需要数据库自动生成的字段(比如自增id),或者将其设为可选,完全符合创建操作的参数要求。
示例代码:
import { Prisma, PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); // 使用Prisma自动生成的UserCreateInput类型 async function createUser(userData: Prisma.UserCreateInput) { return await prisma.user.create({ data: userData }); } // 调用时仅传入name和age,无需包含id await createUser({ name: "john", age: 13 });
为什么导入的User类型包含id?
你直接导入的User类型是数据库返回的完整实体类型,包含所有字段(包括自增id),用于表示从数据库读取的完整数据。而创建操作的参数类型是专门的输入类型,在Prisma命名空间下维护,和实体类型区分开。
备选方案:用TypeScript工具类型剔除字段
如果需要基于现有User类型生成创建用的类型,也可以用TypeScript的Omit工具类型快速实现:
import { User } from '@prisma/client'; // 剔除id字段后的创建类型 type UserCreateDto = Omit<User, 'id'>;
不过更推荐使用Prisma内置的CreateInput类型,因为它会自动适配模型的所有约束(比如其他默认值、可选字段等),无需手动维护。
内容的提问来源于stack exchange,提问作者Sheen
相关产品推荐
相关产品推荐

