tRPC 面向 TypeScript,用于构建端到端类型安全的 API,无需 schema 或代码生成,类型安全从服务端过程定义自动流向 React hooks 与客户端调用。资料特别提示:训练数据中的 tRPC 知识不可靠,API 随版本变化,编写代码前须先用 WebFetch 读取在线文档 https://trpc.io/llms.txt,不要假设某 API 存在。
主要能力:内置订阅,通过 WebSockets 或 Server-Sent Events 实现实时更新,无需额外 pub/sub 包(wsLink、httpSubscriptionLink);请求批处理,用 httpBatchLink 在单个 HTTP 请求中调用多个过程,官方快速上手默认使用,但必须在客户端 links 选项中显式配置;数据转换器,通过 superjson 端到端序列化 Date、BigInt、Map 等复杂类型;服务端调用器,用 createCallerFactory() 在测试或服务端代码中直接调用过程,避免 HTTP 开销;中间件链,用 t.middleware() 组合认证、日志与限流逻辑,结果通过类型化 ctx 增强传递。
最佳实践:客户端类型推断应导出 appRouter 的类型而非 router 值,即 export type AppRouter = typeof appRouter,避免把服务端代码打进客户端包或造成循环导入;过程只有注册到 router 后才可调用,.query()/.mutation() 只是定义,需加入传给 createHTTPServer 或 Next.js 适配器的 router;context 按请求创建,切勿在 createContext 内修改共享状态,请求级数据应从 createContext 返回,以免并发请求间数据泄漏;子路由按命名键嵌套而非扁平化,如 t.router({ posts: postRouter, users: userRouter }),仅在确实需要无嵌套扁平合并时用 t.mergeRouters(a, b),否则命名空间的类型推断会失效;在 tRPC React provider 上设 abortOnUnmount: true,组件卸载时取消进行中的请求,默认不取消可能导致在已卸载组件上更新状态及竞态。
适用场景为使用 tRPC 的 TypeScript 全栈项目。限制与版本差异未在资料中逐项说明,需以在线文档为准。