用途:tRPC 通过在服务端与客户端之间共享 TypeScript 类型,实现端到端类型安全的 API,无需代码生成或额外 schema。服务端在 router 中定义过程(query、mutation、subscription),客户端从导出的 AppRouter 类型推断全部类型。
主要能力:初始化用 initTRPC.context<Ctx>().create();router 用 t.router({...}),可用 t.mergeRouters() 嵌套;query 为 t.procedure.input(schema).query(fn),mutation 为 .mutation(fn),subscription 通过 WebSocket 或 SSE;中间件用 t.middleware(fn) 并以 .use() 串联,可通过 next({ ctx }) 扩展 context;另有 experimental_standaloneMiddleware<{}>()。context 由 createContext({ req, res }) 按请求创建。服务端可用 t.createCallerFactory(router) 进行类型安全调用。错误用 throw new TRPCError({ code, message }) 并映射为 HTTP 状态码,可通过 errorFormatter 定制。输入输出用 .input(zodSchema) 与 .output(zodSchema) 校验,多次 .input() 取交集。
使用方式:安装 pnpm add @trpc/server @trpc/client @trpc/react-query @tanstack/react-query zod。React 端使用 trpc.useQuery()、trpc.useMutation()、trpc.useUtils()、trpc.useSuspenseQuery()、trpc.useSubscription(),基于 @tanstack/react-query。无 React 依赖时用 createTRPCClient<AppRouter>({ links }),链接可选 httpBatchLink、httpBatchStreamLink、wsLink、splitLink、loggerLink。数据转换用 initTRPC.create({ transformer }),如 superjson 序列化 Date、Map、Set。适配器可用于 Cloudflare Workers、Deno、Bun、Next.js 等,如 fetchRequestHandler({ endpoint, req })。
适用场景:全栈 TypeScript 应用的类型安全 API 层、共享类型的 monorepo、实时订阅、无需 OpenAPI/GraphQL 开销的快速迭代。
限制:不适合非 TypeScript 客户端使用的公开 API(应改用 REST/GraphQL)、多语言后端,或以生成 OpenAPI 规范为主要输出的项目。注意仅导出 t.router、t.procedure、t.middleware、t.createCallerFactory,而非整个 t;context 应在适配器初始化中创建;客户端只导入类型 AppRouter,不要导入服务端运行时代码;客户端与服务端必须使用相同 transformer;生产请求处理器中使用 createCallerFactory 而非 createCaller。订阅需在服务端添加 ws,客户端配置 wsLink,或基于 SSE 使用 httpBatchStreamLink。