Depth가 21일 때까지만 대비되어 있으므로 Depth가 22 이상이면 타입스크립트는 제대로 타입을 추론할 수 없을 것입니다. 하지만 실제 코드에서 Depth를 22로 할 가능성은 매우 희박합니다. 타입스크립트가 flat 메서드를 만들 때 100% 정확한 타입은 아니더라도 대부분의 경우에 대응할 수 있게 타이핑해둔 것입니다.
조금 전에 Depth가 -1이 아닌 경우는 FlatArray가 다음과 같이 된다고 분석했습니다.
// Depth가 -1이 아닌 경우
type FlatArray<(number | (number | number[])[])[], 1> =
Arr extends ReadonlyArray<infer InnerArr> // true
? FlatArray<number | (number | number[])[], 0>
: Arr;
따라서 FlatArray<(number | (number | number[])[])[], 1>은 FlatArray<number | (number | number[])[], 0>이 됩니다. 아직 Depth가 -1이 아니므로 한 번 더 Arr extends ReadonlyArray<infer InnerArr>을 거칩니다. extends의 결과는 true인지, InnerArr이 어떻게 추론되는지 코드로 확인해봅시다.