» npm install @prisma/client
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.
» pip install prisma-client
» pip install prisma