Type Challenges

First of Array

#TypeScript

14 - First of Array

배열(튜플) T를 받아 첫 원소의 타입을 반환하는 제네릭 First<T>를 구현하세요.

type arr1 = ["a", "b", "c"];
type arr2 = [3, 2, 1];
 
type head1 = First<arr1>; // expected to be 'a'
type head2 = First<arr2>; // expected to be 3

풀이

type First<T extends any[]> = T extends [infer U, ...unknown] ? U : never;

inferextends와 함께 쓰이며 타입을 추출해서 뒤에서 다시 사용할 수 있게 만드는 역할을 한다.
여기서는 extends를 통해 먼저 T가 1개 이상의 타입을 포함한 배열인지 검증한다.
이 때, 타입의 배열인 T(ex: First<[string, number]>)에서 첫 번째 원소를 infer를 통해 U로 추출한다.
그 다음 삼항 연산자를 통해 1개 이상의 성분을 가진 배열이라면 U를 아니라면 never를 리턴한다.

Reference

Type Challenges, 14 - First of Array