跳至主要内容
版本:11.x

常见问题解答/故障排除

收集了常见问题解答,以及如何解决这些问题的想法。

如果您有任何问题未在此处得到解答,请随时为本页面贡献改进或在 GitHub 上创建一个新的讨论。此外,如果您在此处没有找到答案,请查看 GitHub 讨论 和我们的 Discord

它不起作用!我到处都得到 any

  • 确保您的代码中没有类型错误
  • 确保您的 tsconfig.json 中有 "strict": true
  • 确保您的 @trpc/* 版本在您的 package.json 中匹配

如何让中间件更改我的 Context 的类型?

请参阅 上下文扩展

tRPC 是否已准备好投入生产?

是的。tRPC 非常稳定,被数千家公司使用,甚至像 NetflixPleo 这样的大型公司都在生产环境中使用 tRPC。

为什么 tRPC 在我的单体仓库中不起作用?

这是一个很难回答的问题,但由于 tRPC 没有任何构建步骤,因此问题不太可能出在 tRPC 方面。

以下是一些需要检查的事项

  • 确保您在所有项目中都使用相同版本的 @trpc/*
  • 确保您在所有 tsconfig.json 中都使用 "strict": true
  • 确保您的应用程序中没有类型错误
  • 如果您有专用的服务器和客户端 tsconfig.json 文件,但没有捆绑的服务器单体仓库包,请确保您在客户端 tsconfig.json 中有 "paths": [...],就像您的服务器 tsconfig.json 一样,这样客户端才能找到相同的文件。

您还可以查看我们的 Awesome tRPC 合集,以找到在单体仓库中使用 tRPC 的多个开源项目。

单体仓库是强制性的吗?

不,单体仓库不是强制性的,但如果您不使用它,您将失去使用 tRPC 的一些好处,因为您将失去客户端和服务器协同工作的保证。

您可以利用 tRPC 的一种方法是发布一个包含后端仓库类型的私有 npm 包,并在您的前端仓库中使用它们。

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

我可以根据发送的输入动态返回不同的输出吗?

目前不行,为了让 tRPC 自动执行此操作,我们需要一种名为“更高阶类型”的东西,而这在 TypeScript 中尚不支持。

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

我可以将中间件应用于整个路由器吗?

不行,但您可以使用 基本过程,它比在每个路由器级别上执行此操作提供更多灵活性。

tRPC 是否适用于 Next.js 13 应用程序布局和 RSC?

是的,tRPC 适用于 Next.js 13 应用程序布局和 React 服务器组件,但我们尚未为此构建任何官方示例。

有关更多信息,您可以阅读和关注 此问题,我们在其中引用了一些示例。

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

tl;dr:是的!

如果您在 tRPC 中遇到标记为 unstable_ 的功能,这意味着 API 不稳定,可能会在次要版本更新中发生更改,但

  • 实现的细节可能会在次要更改中发生变化 - 它的名称和选项可能会发生变化
  • 如果它存在于 tRPC 中,它已经在生产环境中使用
  • 我们非常鼓励您使用它
  • 如果对 unstable_ 功能进行了任何更改,它们将包含在发行说明中(您将看到类型错误)
  • 请在 github.com/trpc/trpc/issues我们的 Discord 上的 #🧪-unstable-experimental-features 中报告任何关于 API 设计或问题的建议

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

如果您在 tRPC 中遇到标记为 experimental_ 的功能,这意味着 API 不稳定,很可能在 tRPC 的任何更新中发生更改。

  • 功能的广泛范围及其使用方式可能会发生变化
  • 该功能可能没有经过充分测试
  • 我们可能会完全放弃该功能
  • 您需要阅读最新的文档并进行升级,而没有指导的迁移路径
  • 更改可能不会在发行说明中得到很好的记录
  • 错误不保证会被修复

但是,我们非常欢迎您的意见!请在 我们的 Discord 上的 #🧪-unstable-experimental-features 中报告任何关于 API 设计或问题的建议。

tRPC 对语义版本控制严格吗?

是的,tRPC 对 语义版本控制 非常严格,我们绝不会在次要版本更新中引入重大更改。

因此,除了在 JSDoc 中标记为 @internal 的那些之外,我们还将对导出的 TypeScript type 的更改视为重大更改。

为什么 tRPC 已经处于如此高的版本?

当 tRPC 开始并且用户很少时,我们经常在 API 设计上进行迭代,同时严格遵守语义版本控制。

  • tRPC 的前 9 个版本是在项目的前 8 个月内发布的。
  • 版本 10 是我们在 v9 发布 14 个月后发布的,应该被视为 tRPC 的真正“版本 2”,我们在其中对 API 决策进行了任何根本性更改。(2 在二进制中是 10,对吧?)

我们预计 API 现在将保持稳定,并计划在未来发布任何重大更改的代码重构,就像我们在 v9->v10 升级中所做的那样。


您还有其他想知道的吗?

请在 GitHub 上写一个功能请求,在 GitHub 讨论Discord 上写。您也可以使用页面底部的“编辑此页面”按钮来建议改进此页面或任何其他页面。