写一个接受数组的类型,并且返回扁平化的数组类型
例如:
type flatten = Flatten<[1, 2, [3, 4], [[[5]]]]> // [1, 2, 3, 4, 5]
// 答案 1
type Flatten<T extends readonly any[]> = T extends [infer F, ...infer R]
? F extends readonly any[]
? [...Flatten<F>, ...Flatten<R>]
: [F, ...Flatten<R>]
: T
// 答案 2
type Flatten<T extends readonly any[]> = T extends [infer L, ...infer R]
? [...(L extends readonly any[] ? Flatten<L> : [L]), ...Flatten<R>]
: []
// 答案 3
type Flatten<T extends readonly any[], Res extends readonly any[] = []> = T extends [infer L, ...infer R]
? L extends readonly any[]
? Flatten<[...L, ...R], Res>
: Flatten<R, [...Res, L]>
: Res