Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Property is missing in type prisma/client/index, when adding a custom type to Prisma schema

My custom type "Observations" doesn't seem to be generating correctly as I am getting this error message

Property 'observations' is missing in type 'import("/Users/thomasandrew/Documents/webApps/social-innovate/boilerplate/packages/api/node_modules/.prisma/client/index").ActionPlan' but required in type 'import("/Users/thomasandrew/Documents/webApps/social-innovate/boilerplate/packages/api/src/modules/actionPlan/actionPlan.model").ActionPlan'.ts(2741) actionPlan.model.ts(25, 5): 'observations' is declared here.

This is my Prisma schema file (removed some extraneous fields)

model Observation {
  id                      String @id @default(dbgenerated("gen_random_uuid()"))
  actionPlan              ActionPlan  @relation(fields: [actionPlanId], references: [id])
  actionPlanId            String
  meetingDate             DateTime?
  place                   String?
}

model ActionPlan {
    id          String  @id @default(dbgenerated("gen_random_uuid()")) @unique
    testName    String
    observations Observation[]
}

type-graphql model

@ObjectType()
export class ActionPlan extends BaseModel implements Prisma.ActionPlan {
    @Field()
    testName: string

    @Field()
    department: string

    @Field()
    code: string

    @Field()
    outcome: string

    @Field()
    hypothesis: string

    @Field(type => [Observation])
    observations: Observation[]
}

However even when I run prisma generate successfully, it doesn't add the 'observations' to the Action Plan. Am I missing something? Any help would be great. I also attached screenshot of generated types at node_modules/.prisma/client/index.d.ts

enter image description here.

enter image description here

like image 577
unicorn_surprise Avatar asked Oct 24 '25 17:10

unicorn_surprise


1 Answers

Prisma doesn't include relationships in generated types because not all queries include them. Prisma queries do return relationships according options used, but in the generated code this is done through complex TypeScript.

But always you can define types with relationships included manually or using a combination of ReturnType<T> and Awaited<T> utilities.

Example defining manually:

type ActionPlanWithObservations = ActionPlan & {
  observations: Observation[]
}

Example using Awaited and ReturnType:

type ActionPlanWithObservations =
        Awaited<ReturnType<ActionPlanService["getActionPlan"]>>

Where ActionPlanService is:

class ActionPlanService {      
  getActionPlan(id: string) {
    return prisma.actionPlan.findFirst({
      where: {
         id,
      },
      include: {
         observations: true,
      }
    })
  }
}

Note: Awaited<T> utility is available since TypeScript 4.5

like image 125
Abdiel Araguayan Avatar answered Oct 27 '25 06:10

Abdiel Araguayan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!