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

如何在TypeScript中定义递归类型别名表示深层嵌套结构?

解决TypeScript递归嵌套数组类型的循环引用问题

你的问题出在TypeScript对直接联合类型递归的处理限制上——虽然3.7+版本支持递归类型别名,但type NestedArray = number | NestedArray[]这种单纯的「值类型 | 自身数组」结构会被编译器判定为直接循环引用,从而抛出错误。而你提到的JSON递归类型之所以可行,是因为它包含了对象索引类型{ [key: string]: Json },这种结构的递归属于编译器允许的「结构递归」范畴。

下面提供两种可行的解决方案:

方案1:使用interface扩展数组类型

通过定义继承自Array的接口,利用接口的递归扩展特性实现嵌套数组类型:

interface NestedArray extends Array<number | NestedArray> {}

用这个类型标注你的示例数据完全符合要求:

const nestedNumbers: NestedArray = [1, [2, [3, [4]], 5]]; // 类型检查通过

方案2:使用ReadonlyArray间接实现递归

利用TypeScript内置的ReadonlyArray<T>接口,让递归通过泛型参数传递,避免直接的类型别名循环引用:

type NestedArray = number | ReadonlyArray<NestedArray>;

如果你的场景需要可变数组,可基于此进一步扩展,但这种写法更适配不需要修改的嵌套数组场景。

这两种写法都能准确表示数字或嵌套数字数组的递归结构,满足类型安全的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:33:09