type GetInner<Arr> = Arr extends ReadonlyArray<infer InnerArr>
? InnerArr
: Arr;
type OneDepthInner = GetInner<(number | (number | number[])[])[]>;
// type OneDepthInner = number | (number | number[])[]
type TwoDepthInner = GetInner<OneDepthInner>;
// type TwoDepthInner = number | number[]
TwoDepthInner의 타입은 number | number[]입니다. OneDepthInner의 타입과 다른 것으로 봐서는 extends가 true인 것 같습니다. InnerArr은 number | number[]로 추론되었습니다. Depth도 1 낮아져서 FlatArray<number | (number | number[])[], 0>은 FlatArray<number | number[], -1>이 됩니다.
여기서 number | (number | number[])[]가 어떻게 ReadonlyArray를 extends할 수 있는지 의문이 들 수 있습니다. number는 ReadonlyArray를 extends할 수 없기 때문입니다. 하지만 이 부분은 이렇게 분석하면 안 됩니다. 제네릭과 유니언이 만난 것이므로, 분배법칙이 실행된 것으로 분석해야 합니다.