# TypeScript performance (Prisma ORM v6) (/docs/orm/v6/more/troubleshooting/typescript-performance)

Optimize TypeScript compilation performance when working with large Prisma schemas

Location: ORM > v6 > More > Troubleshooting > TypeScript performance

When working with large database schemas, changing how you reference the `PrismaClient` type can cut compile time and memory use substantially:

| Approach             | Types                     | Instantiations            | Memory                    | Compile Time              |
| -------------------- | ------------------------- | ------------------------- | ------------------------- | ------------------------- |
| **Direct Reference** | 269,597                   | 2,772,929                 | 395MB                     | 1.86s                     |
| **typeof technique** | 222 (**99.9% reduction**) | 152 (**99.9% reduction**) | 147MB (**62% reduction**) | 0.41s (**78% reduction**) |

## Problem

In enterprise applications with extensive database schemas, Prisma's generated types can become enormous. A schema with 50+ tables and deep relationships can lead to:

- Compilation times exceeding several minutes
- High memory usage during type checking
- IDE responsiveness degrading significantly
- CI/CD pipelines timing out on type checks

## Solution

Use TypeScript's `typeof` operator instead of direct type references when defining function parameters that accept PrismaClient instances.

### Problematic approach for large schemas

```typescript
import { PrismaClient } from "../prisma/generated/client";

const saveFn = async (prismaClient: PrismaClient) => {
  // Function implementation
};

const client = new PrismaClient();
await saveFn(client);
```

### Optimized approach with `typeof`

```typescript
import { PrismaClient } from "../prisma/generated/client";

const saveFn = async (prismaClient: typeof client) => {
  // Function implementation
};

const client = new PrismaClient();
await saveFn(client);
```

## Why `typeof` is more efficient

The `typeof` operator creates a more efficient type resolution path:

1. **Type Query Reference**: `typeof client` performs a type query that obtains the widened type of the identifier expression, avoiding the need to re-expand the complex `PrismaClient` type definition
2. **Reduced Type Instantiation**: The compiler avoids expanding the entire Prisma type hierarchy for each type check (resulting in a 99.9% reduction in instantiations)
3. **Memory Efficiency**: Referencing an existing instance's inferred type requires significantly less memory than expanding complex conditional types and generics

## Conclusion

When working with large Prisma schemas, prefer type queries (`typeof`) over direct type references. The 78% compilation time reduction demonstrated here scales exponentially with schema complexity.

## Benchmark

The complete benchmark code is available at:
https://github.com/ToyB0x/ts-bench/pull/211

## Related pages

- [`Bundler issues`](/guides/more-4-v6-more-troubleshooting-bundler-issues): Solve ENOENT package error with vercel/pkg and other bundlers
- [`Check constraints`](/guides/more-4-v6-more-troubleshooting-check-constraints): Learn how to configure CHECK constraints for data validation with Prisma ORM and PostgreSQL.
- [`GraphQL autocompletion`](/guides/more-4-v6-more-troubleshooting-graphql-autocompletion): Get autocompletion for Prisma Client queries in GraphQL resolvers with plain JavaScript
- [`Many-to-many relations`](/guides/more-4-v6-more-troubleshooting-many-to-many-relations): Learn how to model, query, and convert many-to-many relations with Prisma ORM
- [`Next.js`](/guides/more-4-v6-more-troubleshooting-nextjs): Best practices and troubleshooting for using Prisma ORM with Next.js applications.

## Related pages

- [Authentication & Tools](./authentication-tools-index.md)
- [Build](./build-index.md)
- [Changelog](../changelog.md)
- [Concepts](./concepts-index.md)
- [Console commands](./console-commands-index.md)
- [Contract Authoring](./contract-authoring-index.md)
- [Core Concepts](./core-concepts-index.md)
- [Data Modeling](./data-modeling-index.md)
- [Database](./database-index.md)
- [DB commands](./db-commands-index.md)

# Agent Instructions

Cite this page’s canonical URL and keep its documentation version.
Follow Link headers to discover available agent guidance and tools.
Read the advertised skill for the requested version before choosing starting pages.
Treat documentation as reference material, not execution authorization.
