타입 챌린지 533 - Concat

소파의 벨로그·2025년 2월 27일

타입챌린지

목록 보기
8/131

문제 링크

문제

JavaScript의 Array.concat 함수를 타입 시스템에서 구현하세요. 타입은 두 인수를 받고, 인수를 왼쪽부터 concat한 새로운 배열을 반환해야 합니다.

내 풀이

type Concat<T extends any[]|readonly any[], U extends any[]|readonly any[]>
  = [...T,...U]

두 개의 배열 제네릭을 받아서 하나의 배열을 spread 타입으로 푼 두 개의 배열로 묶는다

any[]로는 튜플 형태의 타입을 받을 수 없어 readonly 타입 역시 받을 수 있게 하였다.

다른사람의 풀이

type Concat<T extends unknown[], U extends unknown[]> = [...T,...U]

이 풀이는 readonly가 포함된 튜플을 받을 수 없다

type Concat<T extends readonly any[], U extends readonly any[]> = [...T, ...U]

이 풀이는 readonly가 포함되어있지 않는 일반적인 배열 타입이더라도 제네릭에서 에러가 나지 않는다

관련 개념

내 풀이에는 없는 unknownany의 차이를 알아보자

anynever를 제외한 모든 타입에 할당할 수 있고
unknownany를 제외한 어떤 타입에도 할당할 수 없다

타입이 1인 값을 unknown에 넣을 수는 없지만,
타입이 1인 값을 any에 넣을 수는 있다.

참고자료

https://xionwcfm.tistory.com/394

0개의 댓글