代码之家  ›  专栏  ›  技术社区  ›  xtreebug

Typescript:传递参数时Prisma关系列表字段出错

  •  0
  • xtreebug  · 技术社区  · 2 年前

    我试图用Prisma Client创建一个新项目,但在传递时遇到了一个错误 args ,甚至只是一个像这样的空数组列表 [] .

    这是我的棱镜模型

    generator client {
      provider = "prisma-client-js"
    }
    
    datasource db {
      provider = "postgresql"
      url      = env("DATABASE_URL")
    }
    
    model Project {
        id String @id @default(cuid())
        name String
        date DateTime @default(now())
        createdAt DateTime @default(now())
        updatedAt DateTime @default(now())
        type String
        client String?
        images Image[]
    }
    
    model Image {
        id String @id @default(cuid())
        createdAt DateTime @default(now())
        updatedAt DateTime @default(now())
        title String?
        alt String?
        description String?
        src String
        project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
        projectId String
    }
    

    这是我打字的类型

    export interface Project {
        name: string;
        date: Date;
        type: string;
        client: string;
        images?: Image[];
    }
    
    export interface Image {
        title: string;
        alt: string;
        description: string;
        src: string;
        projectId?: string;
    }
    
    

    这是我的突变

    尝试1

    createProject: async (args: Project) => {
      const project = await prisma.project.create({
        data: {
          client: args.client,
          date: args.date,
          name: args.name,
          type: args.type,
          images: args.images
        }
      })
    }
    

    尝试2

    createProject: async (args: Project) => {
      const project = await prisma.project.create({
        data: {
          client: args.client,
          date: args.date,
          name: args.name,
          type: args.type,
          images: []
        }
      })
    }
    

    尝试3

    createProject: async (args: Project & { images?: Image[] }) => {
      const project = await prisma.project.create({
        data: {
          client: args.client,
          date: args.date,
          name: args.name,
          type: args.type,
          images: args.images
        }
      })
    }
    

    这是来自prisma客户端的错误

    Type 'Image[] | undefined' is not assignable to type 'ImageUncheckedCreateNestedManyWithoutProjectInput | ImageCreateNestedManyWithoutProjectInput | undefined'. Type 'Image[]' is not assignable to type 'ImageUncheckedCreateNestedManyWithoutProjectInput | ImageCreateNestedManyWithoutProjectInput | undefined'.ts(2322)


    index.d.ts(3077, 5): The expected type comes from property 'images' which is declared here on type '(Without<ProjectCreateInput, ProjectUncheckedCreateInput> & ProjectUncheckedCreateInput) | (Without<...> & ProjectCreateInput)' (property) images: Image[] | undefined

    我很好奇如何基于Prisma模型生成TypeScript类型。如果你们有任何最佳实践,我将不胜感激。提前感谢!

    2 回复  |  直到 2 年前
        1
  •  1
  •   SlothOverlord    2 年前

    您可以在运行后直接从Prisma导入类型 npx prisma generate

    import { Image, Project } from "@prisma/client"
    

    如果打开定义它们的文件,则可以获得更详细的模型类型。

    node_modules/.prisma/client/index.d.ts

    这个文件中有很多类型,您只需要找到特定用途所需的类型。

        2
  •  0
  •   xtreebug    2 年前

    事实上,我只是用这个语法解决了这个问题,但我想问你们这是否正确?

    createProject: async (args: Project) => {
      await prisma.project.create({
        data: {
          client: args.client,
          date: args.date,
          name: args.name,
          type: args.type,
          images: {
            createMany: {
              data: [
                {
                  alt: "",
                  description: "",
                  src: "",
                  title: "",
                }
              ]
            }
          },
        }
      })
    }
    
    推荐文章