Skip to main content
Version: 2.x

Enhanced Prisma Types

When you call the enhance API, ZenStack not only enhances PrismaClient's runtime behavior, but also alters its types as needed. For example, when you use polymorphic models, ZenStack translates the inheritance hierarchy into a proper Prisma schema following the Multi-table inheritance pattern, however it keeps the typing of the enhanced PrismaClient simple and provides a real "polymorphic" DX.

You usually don't need to explicitly refer to the enhanced Prisma types, but when you need, import them from the @zenstackhq/runtime/models module instead of @prisma/client.

import type { Post, Prisma } from '@zenstackhq/runtime/models'
import { getEnhancedPrisma } from '~/db'

const db = getEnhancedPrisma();

// explicitly refer to the enhanced model type
const post: Post = await db.post.findUnique({...});

// explicitly refer to the enhanced input type
const createInput: Prisma.PostCreateInput = { ... };
await db.post.create({ data: createInput });

You can also use the Enhanced typing utility to infer the enhanced PrismaClient from its original typing:

import { PrismaClient } from '@prisma/client';
import type { Enhanced } from '@zenstackhq/runtime';

const prisma = new PrismaClient();

type EnhancedPrismaClient = Enhanced<typeof prisma>;

The prisma instance can be a raw PrismaClient, or one with Prisma Client Extensions installed.

Comments
Feel free to ask questions, give feedback, or report issues.

Don't Spam


You can edit/delete your comments by going directly to the discussion, clicking on the 'comments' link below