Ts challenge(2) - Pop

김영현·2024년 5월 15일
0

ts challenge

목록 보기
2/6

Pop

배열의 마지막 요소를 제거하는 메서드. 이를 TS로 구현한다.

일단, 스프레드 연산자를 사용할수 있다. 이를 활용해보자.

type Pop<T extends any[]> = [...T]

여기서 마지막 요소를 어떻게 가져올까? 암만봐도 생각나지 않는다.😥
단순히 스프레드를 사용해서

type Pop<T extends any[]> = [...T, unknown]

이렇게 마지막 요소를 가져올 수도 없다. 고민고민....
생각이 잘 안나서 추천수가 제일 많은 풀이를 봤다.

풀이1) 추천수 1등

type Pop<T extends any[]> = T extends [...infer I, infer _] ? I : never

infer키워드를 사용한다.
다 괜찮은데 마지막 하나에서 오류가 난다.

빈 배열에서 pop했을때, 빈 배열끼리 같아야한다.

풀이2) 풀이1에서 살짝 변형

type Pop<T extends any[]> = T extends [...infer P, unknown] ? P : []

배열 마지막 원소 자리를 unknwon 타입으로 둔다. 그리고 ...infer P를 통하여 마지막 이전 원소라면 P를 그대로 반환하고 아니라면 빈 배열을 반환한다.

이것도 영 이상하긴한데, 오류 없이 잘 동작한다.
그러나 never대신 빈 배열을 할당해주는데...🤔

profile
모르는 것을 모른다고 하기

0개의 댓글