import { Tuple } from '../../primitive/Tuple'; import { Concat } from '../Concat'; import { Length } from '../Length'; import { Push } from '../Push'; type IsDepthExist = T extends readonly [infer First, ...infer Rest] ? First extends Tuple ? true : IsDepthExist : false; type FlattenHelper = T extends readonly [infer First, ...infer Rest] ? First extends Tuple ? Concat> : Concat<[First], FlattenHelper> : T; /** * * Type to flatten an array of arrays * * 튜플의 튜플을 평탄화하는 유틸리티 타입 * * @params T 평탄화할 튜플 타입 * * @params D 평탄화할 깊이 (기본값: 1) * * @returns 지정된 깊이만큼 평탄화된 튜플을 반환합니다 * * @example * type cases = [ * Expect, []>>, * Expect, [1, 2, 3, 4]>>, * Expect, [1, 2]>>, * Expect, [1, 2, 3, 4, [5]]>>, * Expect, [1, 2, 3, 4, [[5]]]>>, * Expect, 3>, [1, 2, 3, 4, [5]]>>, * Expect, [1, 2, 3, 4, 5]>>, * ] * * @link https://www.utilscript.site/docs/usage-array/flatten * */ export type Flatten = IsDepthExist extends false ? T : Length extends D ? T : Flatten, D, Push>; export {};