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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:30:49