You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Typescript API契约类型实例化过深问题排查与解决

解决TypeScript“类型实例化过深,可能无限”错误

我正在构建一个类似ts-rest的轻量API契约工具,移除了ts-rest中的冗余功能,并用JSON Schema替代Zod做校验。代码基于ts-rest修改而来,运行时完全正常,但TypeScript编译器抛出**"type instantiation is excessively deep and possibly infinite"**错误。

报错位置

错误触发在recursivelyRegisterRoutes函数的以下代码段:

if ("contract" in serverImpl && "routes" in serverImpl) {
  recursivelyRegisterRoutes(
    serverImpl.routes,
    serverImpl.contract,
    fastify
 );
}

尝试过的无效方案

升级到TypeScript 5.3版本,问题未得到解决。

最终解决方案

通过修改AppRouteImplementation类型定义修复了该问题,修改后的代码如下:

type AppRouteImplementation<T extends AppRoute> = Omit<
  RouteOptions<
    RawServerDefault,
    RawRequestDefaultExpression,
    RawReplyDefaultExpression,
    {
      Params: T['params'] extends infer R ? FromSchema<R extends JSONSchema ? R : never> : never
      Querystring: T['query'] extends infer R ? FromSchema<R extends JSONSchema ? R : never> : never
      Body: T extends AppRouteMutation
        ? T['body'] extends infer R
          ? FromSchema<R extends JSONSchema ? R : never>
          : never
        : never
    }
  >,
  'method' | 'url'
>

内容的提问来源于stack exchange,提问作者Manu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 04:34:52