타입스크립트는 타입 정의에서 재귀 호출이 가능합니다. 재귀 호출이 적용된 아래의 코드가 그 예입니다.
type Flatten<T> =
T extends (infer U)[]
? Flatten<U>
: T;
Flatten 타입을 정의하고 있는데, 재귀적으로 다시 Flatten을 호출하고 있습니다. 위의 Flatten 타입의 사용 예는 다음과 같습니다.
type A = Flatten<number[][][][]>; // number
위 코드 예시의 Flatten은 재귀적으로 다음처럼 수행하여 최종적인 number 타입을 정의하고 있습니다.
number[][][][] → number[][][] → number[][] → number[] → number
