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의 타입과 다른 것으로 봐서는 extendstrue인 것 같습니다. InnerArrnumber | number[]로 추론되었습니다. Depth1 낮아져서 FlatArray<number | (number | number[])[], 0>FlatArray<number | number[], -1>이 됩니다.

    여기서 number | (number | number[])[]가 어떻게 ReadonlyArrayextends할 수 있는지 의문이 들 수 있습니다. numberReadonlyArrayextends할 수 없기 때문입니다. 하지만 이 부분은 이렇게 분석하면 안 됩니다. 제네릭과 유니언이 만난 것이므로, 분배법칙이 실행된 것으로 분석해야 합니다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.