더북(TheBook)

IsTuple

이번에는 배열 중에서 튜플만 판단하는 IsTuple 타입을 만들어보겠습니다. 튜플이 아닌 배열 타입은 false가 되어야 합니다.

type IsTuple<T> = IsNever<T> extends true
  ? false
  : T extends readonly unknown[]
    ? number extends T["length"]
       ? false
       : true
    : false;

배열과 튜플의 가장 큰 차이점은 뭘까요? 튜플은 길이가 고정되어 있다는 것입니다. 튜플이 아닌 배열은 lengthnumber입니다. 튜플은 1, 2, 3 같은 개별 숫자입니다. 즉, number extends T["length"]false여야 하는 것이 중요합니다.

왜 이번에는 any인지 검사하지 않을까요? anynumber extends T["length"]에서 걸러집니다. any["length"]any이므로 number extends anytrue가 됩니다. 튜플이려면 number extends T["length"]false여야 하므로 IsTuple<any>false가 됩니다.

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