Skip to main content
Version: 11.x

从 v10 迁移到 v11

从 v10 迁移到 v11

¥Migrating from v10 to v11

提示

对于大多数用户来说,迁移应该快速而直接。

¥For most users, the migration should be quick & straight-forward.

如果以下三个步骤还不够,请查看以下文档以了解 "很少中断"。

¥If the below three steps aren't enough, look through the below document for "rarely breaking".

1. 安装新版本

¥ Install new versions

npm install @trpc/server@^11 @trpc/client@^11 @trpc/react-query@^11 @trpc/next@^11 @tanstack/react-query@^5 @tanstack/react-query-devtools@^5

¥ If you're using transformers, update your links

有关更多信息,请参阅 转换器已移至链接

¥See transformers are moved to links for more information.

3. 如果你正在使用 @trpc/react-query,请更新你的 @tanstack/react-query 版本

¥ If you're using @trpc/react-query update your @tanstack/react-query-version

有关更多信息,请参阅 react-query-v5

¥See react-query-v5 for more information.

完整反向时间顺序更新日志

¥Full reverse-chronological changelog

新的 TanStack React Query 集成!(不中断)

¥New TanStack React Query integration! (non-breaking)

我们很高兴地宣布,新的 TanStack React Query 集成现已在 tRPC 的 next 版本中可用!

¥We are excited to announce the new TanStack React Query integration for tRPC is now available on tRPC's next-release!

Read the blog post 了解更多信息。

¥Read the blog post for more information.

停止来自服务器的订阅(很少发生中断)

¥Stopping subscriptions from the server (rarely breaking)

我们现在支持从服务器停止订阅,这意味着你现在可以执行以下操作:

¥We now support stopping subscriptions from the server, this means that you can now do things like this:

ts
const myRouter = router({
sub: publicProcedure.subscription(async function* (opts) {
for await (const data of on(ee, 'data', {
signal: opts.signal,
})) {
const num = data[0] as number | undefined;
if (num === undefined) {
// This will now stop the subscription on the client and trigger the `onComplete` callback
return;
}
yield num;
}
}),
});
ts
const myRouter = router({
sub: publicProcedure.subscription(async function* (opts) {
for await (const data of on(ee, 'data', {
signal: opts.signal,
})) {
const num = data[0] as number | undefined;
if (num === undefined) {
// This will now stop the subscription on the client and trigger the `onComplete` callback
return;
}
yield num;
}
}),
});

有关更多信息,请参阅 订阅文档

¥See the subscriptions docs for more information.

添加对延迟加载路由的支持(无中断)

¥Added support for lazy-loading routers (non-breaking)

有关更多信息,请参阅 延迟加载路由文档

¥See the lazy-loading routers docs for more information.

作为其中的一部分,我们已将内部方法 callProcedure() 的参数更改为接收 { router: AnyRouter } 参数而不是 { _def: AnyRouter['_def'] } 参数。

¥As part of this, we've changed the argument of the internal method callProcedure() to receive a { router: AnyRouter }-param instead of a { _def: AnyRouter['_def'] }-param.

自定义 basePath 处理独立适配器下的请求(非中断)

¥Custom basePath to handle requests under in the standalone adapter (non-breaking)

独立适配器现在支持 basePath 选项,它将从请求路径的开头切分 basePath。

¥The standalone adapter now supports a basePath option, which will slice the basePath from the beginning of the request path.

有关更多信息,请参阅 独立适配器文档

¥See the standalone adapter docs for more information.

添加对 HTTP/2 服务器的支持(无中断)

¥Added support for HTTP/2 servers (non-breaking)

我们现在支持 HTTP/2 服务器,这意味着你现在可以使用 createHTTP2HandlercreateHTTPServer 函数来创建 HTTP/2 服务器。

¥We now support HTTP/2 servers, this means that you can now use the createHTTP2Handler and createHTTPServer functions to create HTTP/2 servers.

有关更多信息,请参阅 独立适配器文档

¥See the standalone adapter docs for more information.

TRPCProcedureOptions 移至 @trpc/client(对大多数情况而言不会造成破坏)

¥Move TRPCProcedureOptions to @trpc/client (non-breaking for most)

如果你之前使用过 @trpc/server 中的 ProcedureOptions,现在需要改用 @trpc/client 中的 TRPCProcedureOptions

¥If you previously used ProcedureOptions from @trpc/server, you now need to use TRPCProcedureOptions from @trpc/client instead.

允许承诺嵌入嵌套数据(非中断)

¥Allow promises to be embedded in nested data (non-breaking)

我们现在允许在使用 httpBatchStreamLink 时将承诺嵌入嵌套数据中,这意味着你现在可以执行以下操作:

¥We now allow promises to be embedded in nested data when using the httpBatchStreamLink, this means that you can now do things like this:

ts
const router = router({
embedPromise: publicProcedure.query(() => {
async function slowThing() {
await new Promise((resolve) => setTimeout(resolve, 1000));
return 'slow';
}
return {
instant: 'instant',
slow: slowThing(),
};
}),
});
ts
const router = router({
embedPromise: publicProcedure.query(() => {
async function slowThing() {
await new Promise((resolve) => setTimeout(resolve, 1000));
return 'slow';
}
return {
instant: 'instant',
slow: slowThing(),
};
}),
});

reconnectAfterInactivityMs 移至 sse.client(不会造成破坏)

¥Moved reconnectAfterInactivityMs to sse.client (non-breaking)

更新了 HTTP 订阅链接改进 部分和相关文档。

¥Updated HTTP Subscription Link improvements-section and related docs.

现在需要 TypeScript 版本 >=5.7.2(非中断)

¥TypeScript version >=5.7.2 is now required (non-breaking)

tRPC 现在需要 TypeScript 版本 5.7.2 或更高版本。此项更改是为了响应 错误报告 而做出的,我们决定采取前瞻性的方法。

¥tRPC now requires TypeScript version 5.7.2 or higher. This change was made in response to a bug report where we decided to take a forward-looking approach.

如果你尝试使用不受支持的 TypeScript 版本安装 tRPC,则在安装过程中会收到对等依赖错误。

¥If you try to install tRPC with an unsupported TypeScript version, you'll receive a peer dependency error during installation.

如果你注意到编辑器显示 any 类型,很可能是因为你的编辑器没有使用正确的 TypeScript 版本。要解决此问题,你需要将编辑器配置为使用项目 package.json 中安装的 TypeScript 版本。

¥If you notice your editor showing any types, it's likely because your editor isn't using the correct TypeScript version. To fix this, you'll need to configure your editor to use the TypeScript version installed in your project's package.json.

对于 VSCode 用户,请将这些设置添加到你的 .vscode/settings.json

¥For VSCode users, add these settings to your .vscode/settings.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
}

experimental.sseSubscriptions 移至 sse(不会造成破坏)

¥Moves experimental.sseSubscriptions -> sse (non-breaking)

experimental.sseSubscriptions 选项已移至 initTRPC.create() 函数中的 sse

¥The experimental.sseSubscriptions option has been moved to just sse in the initTRPC.create()-function.

¥HTTP Subscription Link improvements (non-breaking)

添加了对检测和从陈旧连接中恢复的支持:

¥Added support for detecting and recovering from stale connections:

在服务器上,你可以配置 ping 间隔以保持连接处于活动状态:

¥On the server, you can configure a ping interval to keep the connection alive:

ts
export const t = initTRPC.create({
// ...
sse: {
ping: {
enabled: true,
intervalMs: 15_000,
},
client: {
// Reconnect if no messages or pings are received for 20 seconds
reconnectAfterInactivityMs: 20_000,
},
},
});
ts
export const t = initTRPC.create({
// ...
sse: {
ping: {
enabled: true,
intervalMs: 15_000,
},
client: {
// Reconnect if no messages or pings are received for 20 seconds
reconnectAfterInactivityMs: 20_000,
},
},
});

我们可能会在未来添加默认的 ping 间隔和超时配置,但这尚未决定。欢迎在 Discord 上的 🎏 rfc-streaming 通道中提供反馈。

¥We will likely add a default ping interval and timeout configuration in the future, but this is not yet decided. Feedback is welcome in the 🎏-rfc-streaming channel on Discord.

有关这些功能的更多详细信息,请参阅 httpSubscriptionLink 文档

¥See the httpSubscriptionLink docs for more details on these features.

¥Introduction of retryLink (non-breaking)

查看 retryLink - 允许你重试失败的操作

¥See retryLink - allows you to retry failed operations

useSubscription 改进(无中断)

¥useSubscription improvements (non-breaking)

  • 当使用 useSubscription 钩子订阅过程时,它现在将返回有关订阅和连接状态的信息。

    ¥When subscribing to procedures using the useSubscription hook it will now return information about the status of the subscription and the connection.

  • 使用 httpSubscriptionLink 时能够拥有 ponyfill

    ¥Ability to have a ponyfill when using httpSubscriptionLink

订阅过程输出类型更改为 AsyncGenerator(无中断)

¥Subscription procedure output type changed to AsyncGenerator (non-breaking)

如果你已将订阅与 v11 的异步生成器一起使用,这可能会破坏你推断类型的方式。

¥If you've used subscriptions with async generators with the v11, this might be breaking with how you infer your types.

Details

We changed the inferred output from:

ts
SubscriptionProcedure<{
input: __INPUT__;
output: __OUTPUT__;
}>;
ts
SubscriptionProcedure<{
input: __INPUT__;
output: __OUTPUT__;
}>;

to

ts
SubscriptionProcedure<{
input: __INPUT__;
output: AsyncGenerator<__OUTPUT__, void, unknown>;
}>;
ts
SubscriptionProcedure<{
input: __INPUT__;
output: AsyncGenerator<__OUTPUT__, void, unknown>;
}>;

If you need to infer the value you can use a helper like the below:

ts
type inferAsyncIterableYield<TOutput> =
TOutput extends AsyncGenerator<infer $Yield> ? $Yield : never;
ts
type inferAsyncIterableYield<TOutput> =
TOutput extends AsyncGenerator<infer $Yield> ? $Yield : never;

进行此更改是为了确保库与未来更新保持兼容,并允许在订阅的 AsyncGenerator 中使用 return 类型。

¥This change has been made to ensure the library remains compatible with future updates and allows for the use of the return type in subscriptions' AsyncGenerators.

有关更多信息,请参阅 订阅文档

¥See subscriptions docs for more information.

添加对订阅中的输出验证器的支持(无中断)

¥Added support for output validators in subscriptions (non-breaking)

有关更多信息,请参阅 订阅文档

¥See subscriptions docs for more information.

弃用返回 Observable 的订阅(不会中断)

¥Deprecation of subscriptions returning Observables (non-breaking)

我们现在支持返回订阅的异步生成器函数,我们之前添加了 httpSubscriptionLink

¥We now support returning async generator function for subscriptions and we previously added a httpSubscriptionLink.

要了解如何使用异步生成器函数进行订阅,请参阅 订阅文档

¥To see how to use async generator functions for subscriptions see the subscriptions docs.

删除 AbortControllerEsque-ponyfill(很少发生中断)

¥Removal of AbortControllerEsque-ponyfill (rarely breaking)

我们从 tRPC 中删除了 AbortControllerEsque-ponyfill,如果你需要支持旧版浏览器,可以使用 abortcontroller-polyfill 等 polyfill。

¥We have removed the AbortControllerEsque-ponyfill from tRPC, if you need to support older browsers you can use a polyfill like abortcontroller-polyfill.

支持服务器发送事件 (SSE)(无中断)

¥Support for Server-sent events (SSE) (non-breaking)

我们现在支持 SSE 订阅,这意味着你无需启动 WebSocket 服务器即可在应用中获取实时更新,并且如果连接丢失,客户端可以自动重新连接并恢复。

¥We now support SSE for subscriptions, this means that you don't need to spin up a WebSocket server to get real-time updates in your application & that the client can automatically reconnect and resume if the connection is lost.

👉 httpSubscriptionLink 文档中查看更多

¥👉 See more in the httpSubscriptionLink docs.

支持通过 HTTP 进行流式响应(无中断)

¥Support for streaming responses over HTTP (non-breaking)

我们现在支持使用 httpBatchStreamLink 进行流式突变和查询。

¥We now support streaming mutations and queries using the httpBatchStreamLink.

这意味着查询和变异解析器可以是带有 yieldAsyncGenerator,也可以返回可以推迟到以后的承诺,并且你可以通过 HTTP 使用流响应,而无需使用 WebSockets。

¥This means that query and mutation resolvers can either be AsyncGenerators with yield or return promises that can be deferred for later and you can use stream responses over HTTP, without using WebSockets.

我们希望你对此功能提供反馈,因此请试用它并让我们知道你对 我们的 🎏-rfc-streaming 通道 Discord 的看法!

¥We want your feedback on this feature, so please try it out and let us know what you think in the 🎏-rfc-streaming-channel on our Discord!

👉 httpBatchStreamLink 文档中查看更多

¥👉 See more in the httpBatchStreamLink docs

resolveHTTPRequest 已被使用 Fetch API 的 resolveRequest 取代(很少中断)

¥resolveHTTPRequest has been replaced by resolveRequest that uses Fetch APIs (rarely breaking)

函数 resolveHTTPRequest 已被使用 Fetch API 的 resolveRequest 取代 - Request/Response.

¥The function resolveHTTPRequest has been replaced by resolveRequest which uses the Fetch API - Request/Response.

这是 HTTP 适配器的重大更改,但不应影响你作为用户。

¥This is a breaking change for HTTP-adapters, but should not affect you as a user.

如果你正在构建适配器,请查看我们的适配器如何工作 在代码中,不要成为向我们的 Discord 寻求帮助的陌生人。

¥If you're building an adapter, check out how our adapters work in the code and don't be a stranger to ask for help in our Discord.

TRPCRequestInfo 已更新(很少发生中断)

¥TRPCRequestInfo has been updated (rarely breaking)

现在,当过程需要时,输入会延迟实现,这意味着当 tRPC 调用 createContext 时,输入和过程类型不再可用。

¥Inputs are now materialised lazily when required by the procedure, which means the input and procedure type is no longer available when tRPC calls createContext.

你仍然可以通过调用 info.calls[index].getRawInput() 来访问输入。

¥You can still access the input by calling info.calls[index].getRawInput().

所有实验性表单数据支持都已被替换(很少中断)

¥All the experimental form-data support has been replaced (rarely breaking)

这只会在你使用实验性 formdata 功能时才会对你产生影响

¥This only affects you if you used the experimental formdata features

  • experimental_formDataLink - 使用 httpLink

    ¥experimental_formDataLink - use httpLink

  • experimental_parseMultipartFormData - 不再需要

    ¥experimental_parseMultipartFormData - not needed anymore

  • experimental_isMultipartFormDataRequest - 不再需要

    ¥experimental_isMultipartFormDataRequest - not needed anymore

  • experimental_composeUploadHandlers - 不再需要

    ¥experimental_composeUploadHandlers - not needed anymore

  • experimental_createMemoryUploadHandler - 不再需要

    ¥experimental_createMemoryUploadHandler - not needed anymore

  • experimental_NodeOnDiskFile 和 experimental_createFileUploadHandler 的更改 - 在此第一个版本中不受支持,如果你需要将数据保存在磁盘上,请打开一个问题

    ¥experimental_NodeOnDiskFile and experimental_createFileUploadHandler - not supported in this first release, open an issue if you need to hold data on disk

  • experimental_contentTypeHandlers - 不再需要,但如果社区需要新数据类型,可以重新使用

    ¥experimental_contentTypeHandlers - not needed anymore, but could come back if needed by the community for novel data types

你可以在 examples/next-formdata 中看到新方法

¥You can see the new approach in examples/next-formdata

Procedure._def._output_in / Procedure._def._input_in 移至 Procedure._def.$types(不会造成破坏)

¥Moved Procedure._def._output_in / Procedure._def._input_in to Procedure._def.$types (non-breaking)

这是 tRPC 内部的重大更改,但不应影响你作为用户。

¥This is a breaking change for tRPC internals, but should not affect you as a user.

你无需执行任何操作,除非你在代码中直接使用 Procedure._def._output_inProcedure._def._input_in

¥You don't have to do anything, unless you're using Procedure._def._output_in or Procedure._def._input_in directly in your code.

显式内容类型检查(不会中断)

¥Explicit Content-Type checks (non-breaking)

我们现在在执行 POST 请求时对 Content-Type 标头进行了明确检查。这意味着如果你发送的请求中的 Content-Type 与预期的不匹配,你将收到 415 Unsupported Media Type 错误。

¥We now have explicit checks for the Content-Type-header when doing POST-requests. This means that if you send a request with a Content-Type that doesn't match the expected one, you will get a 415 Unsupported Media Type-error.

我们的 tRPC 客户端已经发送了内容类型标头,因此只有你手动调用 tRPC 时才有可能出现重大变化。

¥Our tRPC clients already sends content-type headers, so is only a potential breaking change if you call tRPC manually.

添加对方法覆盖的支持(很少中断)

¥Added support for method overriding (rarely breaking)

允许你覆盖 HTTP 方法,以便始终使用 POST 发送过程,从而绕过一些限制,例如最大 URL 长度。

¥Allows you to override the HTTP method for procedures to always be sent with POST in order to get around some limitations with e.g. max URL lengths.

关闭 #3910

¥Closes #3910

添加对双向无限查询的支持(无中断)

¥Added support for bi-directional infinite queries (non-breaking)

查看 useInfiniteQuery()

¥See useInfiniteQuery()

添加 inferProcedureBuilderResolverOptions<T>-helper(无中断)

¥Added inferProcedureBuilderResolverOptions<T>-helper (non-breaking)

添加一个助手来推断过程构建器解析器的选项。如果你想为不同的过程创建可重复使用的函数,这很有用。

¥Adds a helper to infer the options for a procedure builder resolver. This is useful if you want to create reusable functions for different procedures.

有关如何使用它的参考,请参阅测试 此处

¥See test here for a reference on how to use it

¥Transformers are moved to links (breaking) -

TypeScript 将指导你完成此迁移

¥TypeScript will guide you through this migration

仅适用于使用数据转换器的情况。

¥Only applies if you use data transformers.

你现在可以在 links 数组中设置数据转换器,而不是在初始化 tRPC 客户端时设置;

¥You now setup data transformers in the links-array instead of when you initialize the tRPC-client;

如果你使用转换器,无论你有 HTTP 链接在哪里,都必须添加 transformer: superjson

¥Wherever you have a HTTP Link you have to add transformer: superjson if you use transformers:

ts
httpBatchLink({
url: '/api/trpc',
transformer: superjson, // <-- add this
});
ts
httpBatchLink({
url: '/api/trpc',
transformer: superjson, // <-- add this
});
ts
createTRPCNext<AppRouter>({
// [..]
transformer: superjson, // <-- add this
});
ts
createTRPCNext<AppRouter>({
// [..]
transformer: superjson, // <-- add this
});

@trpc/next ssr 模式现在需要带有 ssr: true 的 prepass 助手(很少发生中断)

¥@trpc/next ssr mode now requires a prepass helper with ssr: true (rarely breaking)

这是为了修复 https://github.com/trpc/trpc/issues/5378,其中 react-dom 被导入,无论你是否使用此功能。

¥This is to fix https://github.com/trpc/trpc/issues/5378 where react-dom was imported regardless if you were using this functionality or not.

查看 SSR 文档

¥See SSR docs

添加对简写路由定义的支持(无中断)

¥Added support for short-hand router definitions (non-breaking)

查看 合并路由

¥See Merging routers

ts
const appRouter = router({
// Shorthand plain object for creating a sub-router
nested1: {
proc: publicProcedure.query(() => '...'),
},
// Equivalent of:
nested2: router({
proc: publicProcedure.query(() => '...'),
}),
});
ts
const appRouter = router({
// Shorthand plain object for creating a sub-router
nested1: {
proc: publicProcedure.query(() => '...'),
},
// Equivalent of:
nested2: router({
proc: publicProcedure.query(() => '...'),
}),
});

删除 inferHandlerInput<T>ProcedureArgs<T>(对大多数情况而言不会中断)

¥Deleted inferHandlerInput<T> and ProcedureArgs<T> (non-breaking for most)

如果这些类型对你或你的代码库没有任何意义,请忽略此内容

¥If these types mean nothing for you or your codebase, just ignore this

改用 inferProcedureInput<TProcedure>TRPCProcedureOptions

¥Use inferProcedureInput<TProcedure> instead & TRPCProcedureOptions instead

添加 useSuspenseQueries()

¥Added useSuspenseQueries()

查看 useSuspenseQueries

¥See useSuspenseQueries

https://github.com/trpc/trpc/pull/5226

重构内部泛型(很少发生中断)

¥Refactor internal generics (rarely breaking)

我们重构了内部泛型,使其更具可读性(TODO:链接过程构建器酱汁)

¥We have refactored our internal generics and made them more readable (TODO: link procedure builder sauce)

React 现在 >=18.2.0(很少发生中断)

¥React is now >=18.2.0 (rarely breaking)

查看其迁移指南:https://react.nodejs.cn/blog/2022/03/08/react-18-upgrade-guide

¥Check their migration guide: https://react.nodejs.cn/blog/2022/03/08/react-18-upgrade-guide

现在需要 NodeJS 18+ 和现代浏览器(很少发生中断)

¥NodeJS 18+ and Modern Browsers are now required (rarely breaking)

我们添加了 FormData、File、Blob 和 ReadableStream 的使用。现在需要 NodeJS 18,尽管这些浏览器已经支持了很多年。

¥We have added usage of FormData, File, Blob, and ReadableStream. NodeJS 18 is now required, though these have been supported by browsers for many years now.

¥wsLink improvements (minor)

  • 如果服务器在部署期间切换位置,则能够在 url 回调中传递 Promise

    ¥Ability to pass a Promise in the url-callback if servers switch location during deploys

  • 添加了新的 lazy 选项,使 websocket 在没有待处理请求时自动断开连接

    ¥Added new lazy option that makes the websocket automatically disconnect when there are no pending requests

中间件中的 rawInput 现在是 getRawInput(很少发生中断)

¥rawInput in middleware is now a getRawInput (rarely breaking)

虽然我们内部没有做任何不同的事情(目前),但这有助于支持 tRPC 中一个非常需要的功能:JSON 以外的内容类型。

¥While we're not doing anything differently internally (just yet) this is help support a much requested feature in tRPC: content types other than JSON.

简化类型和 .d.ts 输出

¥Simplified types and .d.ts outputs

路由中的程序现在仅发出其输入和输出 - 之前它们还会包含每个程序的完整上下文对象,从而导致不必要的复杂性,例如 .d.ts

¥Procedures in your router now only emit their input & output - where before they would also contain the full context object for every procedure, leading to unnecessary complexity in e.g. .d.ts.

React Query peerDep 现在是 v5(中断) -

¥React Query peerDep is now v5 (breaking) -

你需要做的主要事情是将一堆 isLoading 替换为 isPending

¥The main thing you'll need to do is to replace a bunch of isLoading to isPending

查看其迁移指南:https://tanstack.com/query/v5/docs/framework/react/guides/migrating-to-v5

¥Check their migration guide: https://tanstack.com/query/v5/docs/framework/react/guides/migrating-to-v5

导出名称 AbcProxyXyz 已重命名为 AbcXyz(不会中断)

¥Exports names AbcProxyXyz has been renamed to AbcXyz (non-breaking)

代理名称归因于 v9 使用 AbcXyz 名称,这些名称已被删除,代理名称已重命名为非代理名称,例如:

¥The proxy names were due to v9 using the AbcXyz names, these have been removed and the proxy ones have been renamed to the non-proxy names, e.g:

  • createTRPCClient 从 v9 开始已弃用,现已完全删除。createTRPCProxyClient 已重命名为 createTRPCClientcreateTRPCProxyClient 现已标记为弃用。

    ¥createTRPCClient was deprecated from v9, and is now completely removed. The createTRPCProxyClient has been renamed to createTRPCClient instead. createTRPCProxyClient is now marked as deprecated.

SSG 助手(很少发生中断)

¥SSG Helpers (rarely breaking)

  • createSSGHelpers 适用于 v9,现已删除。v10 等效 createProxySSGHelpers 现在已重命名为 createSSGHelpers

    ¥createSSGHelpers were for v9 which has now been removed. the v10 equivalent createProxySSGHelpers have been renamed to createSSGHelpers now instead.

  • createProxySSGHelpers 现已弃用,但别名为 createSSGHelpers 以实现向后兼容。

    ¥createProxySSGHelpers is now deprecated but aliased to createSSGHelpers for backwards compatibility.

  • 删除导出的类型 CreateSSGHelpersOptions

    ¥Removed exported type CreateSSGHelpersOptions

interop 模式已被删除(很少发生中断) -

¥interop-mode has been removed (rarely breaking) -

我们从 tRPC 中删除了 interop 模式。这种模式可让你轻松地从 v9 过渡到 v10。这种模式从未打算长期支持,我们现在已经将其删除。

¥We have removed the interop-mode from tRPC. This was a mode that allowed you to have an easy transition period from v9 to v10. This mode was never meant to be supported long-term and we have now removed it.