The generated types do not include relations because queries don't return relations by default. To include the related models in your type, use the provided Prisma utility types like so:
import { Prisma } from '@prisma/client'
type UserWithPosts = Prisma.UserGetPayload<{
include: { posts: true }
}>
Answer from Austin Crim on Stack Overflowtypescript - How to add type definitions for includes in a Prisma model? - Stack Overflow
how to convert prisma schema to typescript types ?
get full type on prisma client - Stack Overflow
Missing TypeScript generation for include syntax?
For example if I have this simple schema
model User { id String @id @default(uuid()) email String @unique }
I want to have this user type:
type User ={ id : string;
email: string; }
An alternate method (my preferrence) to get the "full" type, or the model with all of its possible relations, is to use the GetPayload version of your model type. The type is a generic that can receive the same object you pass to your query.
import { PrismaClient, Prisma } from "@prisma/client";
const prisma = new PrismaClient();
type UserWithCars = Prisma.UserGetPayload<{
include: {
cars: true;
}
}>
const usersWithCars = await prisma.user.findMany({
include: {
cars: true,
}
});
As your query grows more complex, you may want to abstract it and ensure that it is strongly typed.
import { Prisma, PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
const userInclude = Prisma.validator<Prisma.UserInclude>()({
cars: true,
});
type UserWithCars = Prisma.UserGetPayload<{
include: typeof userInclude;
}>;
const usersWithCars = await prisma.user.findMany({
include: userInclude,
});
You can use the Prisma Validator API along with some typescript features to generate types for your query.
For the findMany example you mentioned
import { Prisma } from '@prisma/client'
// 1. Define a User type that includes the "cars" relation.
const userWithCars = Prisma.validator<Prisma.UserArgs>()({
include: { cars: true },
})
// 2: This type will include many users and all their cars
type UserWithCars = Prisma.UserGetPayload<typeof userWithCars>[]
If you simply want to automatically infer the return type of a prisma query wrapped in a function, you can use PromiseReturnType.
For example:
import { Prisma } from '@prisma/client'
async function getUsersWithCars() {
const users = await prisma.user.findMany({ include: { cars: true } });
return users;
}
type UsersWithCars = Prisma.PromiseReturnType<typeof getUsersWithCars>
You can read more about this in the Operating against partial structures of your model types concept guide in the Prisma docs.