타입챌린지 4484 - IsTuple

소파의 벨로그·2025년 4월 26일

타입챌린지

목록 보기
66/131

문제 링크

문제

타입 T를 받고 T가 튜플 타입인지 확인하는 IsTuple 타입을 구현하라

Implement a type IsTuple, which takes an input type T and returns whether T is tuple type.

내 풀이

type IsTuple<T> = 
  [T] extends [never]?false //1
  :T extends any[]|readonly any[]? //2
    number extends T['length']? //3
      false
      :true
    :false

반례들을 막기 위해 일단 스파게티 코드로 구현시켰다

never를 확인하기 위해 1번 조건을 만들었고

T가 배열 타입인지 확인하기 위해 2번 조건을 만들었다. 이때, readonly 배열을 배열 타입이 아니라고 ts내에서 판단하기 때문에 readonly 배열도 조건에 추가하였다.

이후, tuple 타입은 length가 명확한 숫자 타입이기 때문에 3번 조건에서 T['length']가 number인지 확인했다(만약 T['length']가 명확한 숫자타입이면 {ex: number extends 1} 조건이 성립하지 않기 때문)

다른 사람의 풀이

다른 풀이를 확인해보니

1번 조건에서 유니온 타입이 아닌유니온 타입이 아닌 readonly any[]로 구현해도 됨을 확인했다.

관련 개념

readonly 튜플은 튜플 내의 값을 바꿀 수 없도록 고정해놓은 튜플이다.

이때 readonly 튜플은 일반 튜플에 할당할 수 없다.
다만, 일반 튜플은 readonly 튜플에 할당 할 수 없다.

관련자료

참고자료

https://github.com/type-challenges/type-challenges/issues/4491

https://www.typescriptlang.org/docs/handbook/2/objects.html#readonly-tuple-types

0개의 댓글