跳至主内容
版本:11.x

FAQ / 故障排除

非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

本页面收集了常见问题及其排查解决方案。

欢迎随时改进本页内容,若您的问题未在此处得到解答,请在GitHub发起新讨论。此外,若此处未覆盖您的问题,建议查阅GitHub讨论区或加入我们的Discord社区

无法运行!所有类型都变成了any

  • 确保代码中没有类型错误

  • 确认tsconfig.json中设置了"strict": true

  • 检查package.json中所有@trpc/*依赖版本是否一致

  • 确保您使用的是 tRPC 要求的 TypeScript 版本(>=5.7.2

  • 确保您的编辑器使用的 TypeScript 版本与 package.json 中的一致

VSCode 设置

将以下设置添加到项目根目录的 .vscode/settings.json 中,以确保编辑器使用的 TypeScript 版本与 package.json 中的一致:

.vscode/settings.json
json
{
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true
}
.vscode/settings.json
json
{
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true
}

我们强烈建议将此文件提交到仓库中,这样您的同事也能获得相同的体验。

如何通过中间件修改Context类型?

参见上下文扩展文档

tRPC是否可用于生产环境?

是的。tRPC非常稳定,已被数千家公司采用,包括NetflixPleo等大型企业都在生产环境中使用。

为何在monorepo中无法使用tRPC?

此问题难以直接定论,但由于tRPC不涉及构建步骤,问题大概率并非由tRPC本身引起。

请检查以下事项:

  • 确保所有项目中@trpc/*依赖版本完全一致

  • 确认所有tsconfig.json文件都设置"strict": true

  • 检查应用程序中是否存在类型错误

  • 若您使用独立服务端与客户端tsconfig.json文件(非monorepo打包模式),请确保客户端tsconfig.json中配置了与服务端tsconfig.json相同的"paths": [...]映射,使客户端能正确解析文件路径。

可参考Awesome tRPC资源集,查看使用tRPC的monorepo开源项目实例。

必须使用monorepo吗?

不必强制使用,但若不采用monorepo,将丧失tRPC的部分核心优势——无法保证客户端与服务端的协同工作能力。

替代方案:将后端仓库的类型定义发布为私有npm包,在前端仓库中引用该包。

相关讨论:https://github.com/trpc/trpc/discussions/1860

能否根据输入动态返回不同输出类型?

目前不支持。tRPC需依赖TypeScript尚未实现的"高阶类型"(Higher kinded types)功能才能自动实现此特性。

相关讨论:https://github.com/trpc/trpc/discussions/2150

能否对整个路由应用中间件?

不能,但可使用基础过程,这比按路由级处理更灵活。

tRPC是否兼容Next.js App Router和RSC?

是的,tRPC完全兼容Next.js App Router和React Server Components。具体配置方法请参考Next.js App Router设置指南

使用标记为unstable_的功能安全吗?

太长不看版:安全!

如果您在 tRPC 中遇到标记为 unstable_ 的功能,意味着该 API 尚未稳定,可能在次要版本更新中发生变化,但请注意:

  • 具体实现细节可能在次要更新中变动——包括功能名称和选项

  • 只要该功能存在于tRPC中,就说明已有生产环境实践案例

  • 我们非常鼓励您使用这些功能

  • unstable_ 功能进行的任何更改都将包含在发布说明中(您会看到类型错误提示)

  • 欢迎在 github.com/trpc/trpc/issuesDiscord#🧪-unstable-experimental-features 频道反馈 API 设计建议

使用标记为experimental_的功能安全吗?

如果您在 tRPC 中遇到标记为 experimental_ 的功能,意味着该 API 极不稳定,任何版本更新都可能导致变更:

  • 功能范围和用法可能发生重大变化

  • 测试覆盖可能不充分

  • 该功能可能被完全移除

  • 需要您自行查阅最新文档进行升级(不提供迁移指导)

  • 变更可能不会在发布说明中详细记录

  • 不保证会修复发现的缺陷

但我们非常重视您的反馈!欢迎在 Discord#🧪-unstable-experimental-features 频道提出 API 设计建议或问题。

tRPC 是否严格遵循语义化版本规范?

是的,tRPC 严格遵循语义化版本规范,我们绝不会在次要版本更新中引入破坏性变更。

同时,我们也将对 export 导出的 TypeScript type 类型的变更视为重大更新(标记为 @internal 的 JSDoc 类型除外)。

为什么 tRPC 的版本号如此之高?

tRPC早期用户量较少时,我们严格遵循语义化版本规范,在迭代过程中频繁调整API设计。

  • 项目前 8 个月发布了前 9 个版本

  • 我们在 v9 发布 14 个月后推出的 版本 10 应视为真正的 "v2" 版本,其中对 API 进行了根本性重构 (2 is 10 in binary, amirite?)

当前 API 已趋于稳定,未来任何破坏性变更都将提供代码迁移工具,如同 v9→v10 升级时所做的。


slug: typescript-performance-lessons title: v10重构过程中的TypeScript性能优化经验 authors: [sachinraja]

还有其他问题?

请在 GitHub 提交需求,在 讨论区 留言,或加入 Discord。您也可以通过页面底部的 "编辑此页" 按钮提交改进建议。