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

Typescript如何定义flatten函数的interface,返回无嵌套任意类型数组

TypeScript flatten函数的类型定义方案

核心通过递归条件类型实现嵌套数组类型的深度拆解:

  1. 首先定义通用深度扁平化工具类型
// 支持处理普通数组与只读数组
type DeepFlatten<T> = T extends readonly any[] ? DeepFlatten<T[number]> : T;

逻辑说明:如果输入类型T是数组/只读数组,就取出所有元素的联合类型T[number],继续递归拆解,直到拿到非数组的底层类型为止。
2. 补全Flatten接口定义

interface Flatten {
  <T extends any[]>(arr: T): Array<DeepFlatten<T>>
}
  1. 效果验证
// 扁平化函数实现示例
const flatten: Flatten = (arr) => {
  return arr.reduce((acc, cur) => acc.concat(Array.isArray(cur) ? flatten(cur) : cur), [])
}

// 测试用例1
const test1 = [{}, 'hello', 2, [3, ['ay'], 'oi oi']];
const res1 = flatten(test1); 
// res1 类型推导为:({} | string | number)[],符合预期

// 测试用例2
const test2 = [[[[5]]]];
const res2 = flatten(test2);
// res2 类型推导为:number[],符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:54:01