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
typescript - How to access prisma generated types? - Stack Overflow
Usage of generated type from Prisma/Client
how to convert prisma schema to typescript types ?
» npm install @mainamiru/prisma-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; }
» npm install prisma-json-types-generator
With Prisma ORM, Express, React stack. Other tools have commands I can run that generate a types file on my frontend of the DB models, but I cannot find anything for how to do that with Prisma / Express / React. I have a prisma schema file with a format that looks close to typescript, so it should be easy to have a command that uses that file to make a typescript version. Any ideas?
Keep in mind that the client-side is not using prisma. It is using express APIs, which then use prisma.
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.