Hey @andreasqlight ๐ ,
You should be able to import any of Prisma's generated types from the @prisma/client package.
model User { ... }
import type { User } from '@prisma/client'
Let me know if that works!
Prisma generate types without pushing changes to database - Stack Overflow
how to convert prisma schema to typescript types ?
get full type on prisma client - Stack Overflow
typescript - How to add type definitions for includes in a Prisma model? - Stack Overflow
ยป npm install prisma
ยป npm install zod-prisma-types
ยป npm install prisma-json-types-generator
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.