Typescript如何定义flatten函数的interface,返回无嵌套任意类型数组
TypeScript flatten函数的类型定义方案
核心通过递归条件类型实现嵌套数组类型的深度拆解:
- 首先定义通用深度扁平化工具类型
// 支持处理普通数组与只读数组 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>> }
- 效果验证
// 扁平化函数实现示例 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
相关产品推荐
相关产品推荐

