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

如何实现任意深度嵌套数组类型转换?以ConvertToBool<T>为例

解决任意深度嵌套数组的TypeScript类型转换问题

嘿,这问题我熟!要实现能处理任意深度嵌套数组的类型转换,关键在于用递归条件类型来逐层穿透数组结构,直到处理最内层的元素。

下面是ConvertToBool<T>的完整实现:

type ConvertToBool<T> = 
  // 如果T是数组类型,就递归转换它的元素类型,再重新包裹成数组
  T extends Array<infer U> 
    ? Array<ConvertToBool<U>> 
    // 非数组类型直接转成boolean
    : boolean;

测试一下效果:

  • 三层嵌套数组场景:ConvertToBool<number[][][]> → boolean[][][],完全符合你的需求
  • 混合类型嵌套数组:ConvertToBool<(string | number)[][]> → boolean[][]
  • 对象内的嵌套数组也能处理:ConvertToBool<{ list: number[][], id: string }> → { list: boolean[][], id: boolean }

为什么之前的实现没生效?

大概率是你只处理了第一层数组,没有递归处理嵌套的内层数组。比如如果之前的代码是这样的:

// 只处理一层数组的错误示例
type BadConvertToBool<T> = T extends Array<any> ? boolean[] : boolean;

那它只能把number[]转成boolean[],但number[][]会被直接判断为“是数组”,返回boolean[]而非boolean[][]——递归的作用就是让我们能逐层处理每一层嵌套的数组元素。

如果需要更通用的转换(比如不仅转成boolean,还能转成任意类型),还可以把目标类型抽成参数:

type ConvertTo<T, Target> = 
  T extends Array<infer U> 
    ? Array<ConvertTo<U, Target>> 
    : Target;

// 用法示例:ConvertTo<number[][][], boolean> → boolean[][][]

这样不管是转boolean、string还是其他自定义类型,都能复用这个通用类型啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:45:54