더북(TheBook)
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할 수 없기 때문입니다. 하지만 이 부분은 이렇게 분석하면 안 됩니다. 제네릭과 유니언이 만난 것이므로, 분배법칙이 실행된 것으로 분석해야 합니다.

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