I’m encountering an issue with TypeScript not properly inferring the types when using PrismaClient in my Node.js typescript application.
Setup:
-
Prisma Schema:
generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model Account { id String @id @default(uuid()) telegram_id BigInt @unique telegram_username String? @unique }
-
Prisma Client Initialization:
import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); export default prisma;
Issue:
When I perform a simple findUnique
query, TypeScript infers the type as a complex Prisma type instead of the expected model type.
const getAccount = async (telegram_id: number) => {
const account = await prisma.account.findUnique({
where: { telegram_id: telegram_id.toString() },
});
return account;
};
// Testing type inference
const testTypeInference = async () => {
const account = await getAccount(123456);
if (account) {
// TypeScript should infer that account is of type Account
// but instead it infers a complex Prisma type
console.log(account.telegram_username);
}
};
testTypeInference();
Expected Type:
account
should be inferred asAccount | null
.
Actual Type:
account
is inferred asPrisma__AccountClient<Account | null>
.
Question:
How can I ensure that TypeScript infers the correct type (Account | null
) for the result of the findUnique
query without needing to manually set the types?
Any help would be greatly appreciated!