用途:tRPC 通过共享 TypeScript 类型实现端到端类型安全的 API,客户端与服务端之间无需代码生成或 schema 文件。修改某个 procedure 的输入/输出后,客户端会立即出现 TypeScript 报错。版本为 v11.7+(2024-2025),要求 TypeScript ≥5.7.2 且开启 strict 模式。
主要能力:支持 query(读)与 mutation(写)两类 procedure;使用 Zod 做输入校验;支持基于游标的分页;提供中间件机制,可实现鉴权、基于角色的授权和日志记录;支持按领域拆分 router 并合并为根 router;通过 errorFormatter 输出 Zod 校验错误;提供标准 TRPCError 错误码(BAD_REQUEST、UNAUTHORIZED、FORBIDDEN、NOT_FOUND、CONFLICT、INTERNAL_SERVER_ERROR)。
使用方式:安装依赖 npm install @trpc/server @trpc/client zod;React/Next.js 需 npm install @trpc/react-query @tanstack/react-query@^5。在专用文件(如 src/server/trpc.ts)中创建 tRPC 实例,导出 router、publicProcedure、middleware、createCallerFactory;在 context.ts 中创建上下文(如 Express 适配器);在各领域 router 中定义 procedure,并在 _app.ts 中合并导出 AppRouter 类型供客户端使用。服务端可用 createExpressMiddleware 挂载到 /trpc 路径,客户端建议使用 httpBatchLink 启用请求批处理。
适用场景:自控前后端代码的全栈 TypeScript 应用(Next.js、React + Express);需要类型安全 API 但不想引入 GraphQL 复杂度的项目;需要自动请求批处理与缓存的场景;内部 API、仪表盘、管理后台。
限制:不适合需要 REST/OpenAPI 的外部客户端(可配合 OpenAPI 适配器)、非 TypeScript 客户端(移动应用、第三方集成)以及多语言微服务。应避免混用 v10 与 v11 模式、跳过输入校验、抛出非 TRPCError 异常、创建多个 tRPC 实例、对 context 类型使用 any。常见问题包括客户端类型不更新、校验错误不显示、CORS 错误和请求未批处理,资料中给出了对应排查方向。