출처: Type Challenges, https://github.com/type-challenges/type-challenges/blob/main/README.ko.md
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
`infer`는 `extends`와 함께 쓰이며 타입을 추출해서 뒤에서 다시 사용할 수 있게 만드는 역할을 한다.
여기서는 extends를 통해 먼저 T가 1개 이상의 타입을 포함한 배열인지 검증한다.
이 때, 타입의 배열인 T(ex: `First<[string, number]>`)에서 첫 번째 원소를 infer를 통해 U로 추출한다.
그 다음 삼항 연산자를 통해 1개 이상의 성분을 가진 배열이라면 U를 아니라면 never를 리턴한다.
'알고리즘 > Type Challenges' 카테고리의 다른 글
43 - Exclude (0) | 2023.09.06 |
---|---|
18 - Length of Tuple (0) | 2023.09.06 |
11 - Tuple to Object (0) | 2023.09.04 |
7 - Readonly (0) | 2023.09.02 |
4 - Pick (0) | 2023.09.02 |