Merging Routers
Writing all API-code in your code in the same file is not a great idea. It's easy to merge routers with other routers.
Thanks to TypeScript 4.1 template literal types we can also prefix the procedures without breaking typesafety.
Working example
- Code at /examples/next-prisma-starter/src/server/routers/app.ts
- All code for posts living in a separate router and namespaced with
post.
Example code
server.ts
import { initTRPC } from '@trpc/server';
export const t = initTRPC()();
const postRouter = t.router({
create: t.procedure
.input(
z.object({
title: z.string(),
}),
)
.mutation(({ input }) => {
// ...
return {
id: 'xxxx',
...input,
};
}),
list: t.procedure.query(() => {
// ...
return [];
}),
});
const userRouter = t.router({
list: t.procedure.query(() => {
// ..
return [];
}),
});
const appRouter = t.router({
user: userRouter, // put procedures under "user" namespace
post: postRouter, // put procedures under "post" namespace
});