주어진 배열을 플랫한 배열 타입으로 바꾸는 Flatten 타입을 구현하세요.
type FlattenImplementation<T extends any[], Result extends any[]=[]>=
T extends [infer First,...infer Last]?
First extends any[]?
FlattenImplementation<Last,[...Result,...FlattenImplementation<First>]>
:FlattenImplementation<Last,[...Result,First]>
:Result
type Flatten<T extends any[]> =FlattenImplementation<T>
type Shift<T extends any[]> = T extends [T[0], ...infer item] ? [...item] : []
type Flatten<T extends any[], R extends any[]=[]> = T extends [] ? R :
(T[0] extends any[] ? Flatten<[...T[0], ...Shift<T>], R> : Flatten<Shift<T>, [...R, T[0]]>)
shift 타입을 만들어 푼 사람도 있었다.
https://github.com/type-challenges/type-challenges/issues/1314