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

运行NG BUILD时报错:DeepTypeOfCollection非泛型且存在循环引用

解决NG BUILD时的DeepTypeOfCollection类型错误

错误1:type DeepTypeOfCollection is not generic

这个错误是因为你在使用DeepTypeOfCollection时传入了泛型参数,但类型别名的定义里并没有声明泛型约束。比如你写了DeepTypeOfCollection<MyType>,但定义却是:

// 错误写法:无泛型参数
type DeepTypeOfCollection = { /* ... */ }

修复方式:给类型别名添加泛型参数声明:

// 正确写法:声明泛型参数T
type DeepTypeOfCollection<T> = {
  // 基于T的类型定义
}

如果是反过来——定义了泛型但使用时没传参数,那就补全泛型参数,比如DeepTypeOfCollection<YourTargetType>。


错误2:Type alias DeepTypeOfCollection circularly references itself

这是因为你的类型定义中存在无限递归引用,比如直接在类型里又引用了DeepTypeOfCollection本身,却没有设置递归终止条件。比如:

// 错误写法:无限递归
type DeepTypeOfCollection<T> = T extends Array<infer U>
  ? DeepTypeOfCollection<U>[]
  : T extends object
  ? { [K in keyof T]: DeepTypeOfCollection<T[K]> }
  : DeepTypeOfCollection<T>; // 这里又引用了自身,导致循环

修复方式:添加递归终止条件,当处理到基本类型(非对象/数组)时直接返回该类型,不再递归:

// 正确写法:添加基本类型终止条件
type DeepTypeOfCollection<T> = 
  T extends Array<infer U>
    ? DeepTypeOfCollection<U>[]
    : T extends object
      ? { [K in keyof T]: DeepTypeOfCollection<T[K]> }
      : T; // 基本类型直接返回,终止递归

如果你的场景里需要处理特殊对象(比如Date、Map这类不需要深层遍历的),可以把它们加入终止条件:

type DeepTypeOfCollection<T> = 
  T extends Date | Map<any, any> | Set<any>
    ? T // 特殊对象直接返回
    : T extends Array<infer U>
      ? DeepTypeOfCollection<U>[]
      : T extends object
        ? { [K in keyof T]: DeepTypeOfCollection<T[K]> }
        : T;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:35:04