더북(TheBook)

다음으로 Arr extends ReadonlyArray<infer InnerArr>이 참이냐 거짓이냐를 판단해야 합니다. ReadonlyArrayreadonly가 적용된 배열입니다. 요즘은 ReadOnlyArray<T> 대신 readonly T[]로 쓰긴 합니다. 모든 배열은 ReadonlyArrayextends할 수 있습니다. 다음 코드로 확인할 수 있습니다.

type TorF<Arr> = Arr extends ReadonlyArray<any> ? true : false;
type Result = TorF<any[]>;
// type Result = true

이처럼 extends의 결과가 궁금하다면 직접 타입을 만들어서 결과를 확인하면 됩니다.

Arr extends ReadonlyArray<infer InnerArr>이 참이므로 타입스크립트는 infer InnerArr을 통해 InnerArr 배열을 추론할 수 있습니다. Arr(number | (number | number[])[])[]라면 InnerArr은 마지막 []을 제거한 number | (number | number[])[]인 것이죠. InnerArr이 어떻게 추론되는지 궁금하다면 다음과 같은 코드로도 InnerArr을 확인할 수 있습니다.

type GetInner<Arr> = Arr extends ReadonlyArray<infer InnerArr>
  ? InnerArr
  : never;
type OneDepthInner = GetInner<(number | (number | number[])[])[]>;
// type Result type OneDepthInner = number | (number | number[])[]= true
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.