Last of Array - medium - [Type Challenge]

강성훈·2023년 1월 26일
0

type-challenges

목록 보기
20/20
post-thumbnail

by Anthony Fu @antfu

문제

배열 T를 사용하고 마지막 요소를 반환하는 제네릭 Last<T>를 구현합니다.

type arr1 = ['a', 'b', 'c']
type arr2 = [3, 2, 1]

type tail1 = Last<arr1> // expected to be 'c'
type tail2 = Last<arr2> // expected to be 1

솔루션

2가지의 방법으로 솔루션을 제시해보겠습니다.

첫 번 째 솔루션

타입 추론을 통한 마지막 index가 가르키는 값 구하기

type Last<T extends any[]> = T extends [...any[], infer last] ? last : never;

마지막 index를 제외하고는 ...any[]속에 전부 들어가게 됩니다. 그렇게 마지막 last 만 구할 수 있습니다.

두 번 째 솔루션

array의 length 속성을 사용하는 방법입니다.
array.length는 마지막을 가르키지 않습니다. -1을 해줘야 하는데 type에서는 length-1이 작동하지 않습니다.

이를 해결하기 위해 새로운 배열을 만들어 0번 째 인덱스를 채우는 것으로 해결하였습니다.

type Last<T extends any[]> = [never, ...T][T["length"]];
profile
고등학생 주니어 개발자

0개의 댓글