Prisma 中生成的类型没有架构中定义的可选字段

Sub*_*ngh 2 orm prisma prisma2

使用 Prisma v 3.8.1

我的User模型是

model User {
  id                   Int          @id @default(autoincrement())
  createdAt            DateTime?    @default(now())
  email                String       @unique
  name                 String       
  password             String
  accessToken          String?
  accessTokenCreatedAt DateTime?    @default(now())
  address              String?
  city                 String?
  state                String?
  postalCode           String?
  phoneNumber          Int?
  igUserId             String?
  role                 Role         @relation(fields: [roleId], references: [id])
  roleId               Int
  organization         Organization? @relation(fields: [organizationId], references: [id])
  organizationId       Int?
  orders               Order[]
}
Run Code Online (Sandbox Code Playgroud)

生成的类型是

type User = {
    id: number;
    createdAt: Date | null;
    email: string;
    name: string;
    password: string;
    accessToken: string | null;
    accessTokenCreatedAt: Date | null;
    address: string | null;
    city: string | null;
    state: string | null;
    postalCode: string | null;
    phoneNumber: number | null;
    igUserId: string | null;
    roleId: number;
    organizationId: number | null;
}
Run Code Online (Sandbox Code Playgroud)

如模型中所述,此类型没有可选字段,甚至对于自动生成的 id 字段也是如此。因此,在我的代码中使用这种类型时,我不断收到此错误

Type '{ name: any; email: any; password: string; roleId: number; }' is missing the following properties from type 'User': id, createdAt, accessToken, accessTokenCreatedAt, and 7 more.
Run Code Online (Sandbox Code Playgroud)

预期行为:可选字段应标记为可选?在生成的打字稿类型中,以便在代码中轻松设置所需字段并将其传递给 .create() 方法

Dan*_*ila 6

此类型不适合与或类似的方法一起使用create。它是find*方法的返回类型等。它应该匹配数据库表,并且表没有未定义或可选行,只能为空或不可为空。

如果仔细观察,您可以找到其他类型,例如,UserCreateArgs具有data将用于create方法的属性。该类型具有您想要的可选字段。

我不明白的是你从哪里得到这个错误?您是否尝试过将这些类型用于您自己的包装器?

  • 是的,这是不正确的。正如我在答案中所写,您需要使用 `UserCreateArgs["data"]` (2认同)