Skip to content

Exceeds the Maximum Length Problem ​

ts
export const 
router
= {
The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed.
// many procedures here }

Are you seeing this error? If so, congratulations! your project is now complex enough to encounter it!

Why It Happens ​

This error is expected, not a bug. Typescript enforces this to keep your IDE suggestions fast. It appears when all three of these conditions are met:

  1. Your project uses "declaration": true in tsconfig.json.
  2. Your project is large or your types are very complex.
  3. You export your router as a single, large object.

How to Fix It ​

1. Disable "declaration": true in tsconfig.json ​

This is the simplest option, though it may not be ideal for your project.

2. Define the .output Type for Your Procedures ​

By explicitly specifying the .output or your handler's return type, you enable TypeScript to infer the output without parsing the handler's code. This approach can dramatically enhance both type-checking and IDE-suggestion speed.

TIP

Use the type utility if you just want to specify the output type without validating the output.

3. Export the Router in Parts ​

Instead of exporting one large object on the server (with "declaration": true), export each router segment individually and merge them on the client (where "declaration": false):

ts
export const userRouter = { /** ... */ }
export const planetRouter = { /** ... */ }
export const publicRouter = { /** ... */ }

Then, on the client side:

ts
interface Router {
  user: typeof userRouter
  planet: typeof planetRouter
  public: typeof publicRouter
}

export const client: RouterClient<Router> = createORPCClient(link)

Released under the MIT License.