배열의 마지막 요소를 제거하는 메서드. 이를 TS로 구현한다.
일단, 스프레드 연산자를 사용할수 있다. 이를 활용해보자.
type Pop<T extends any[]> = [...T]
여기서 마지막 요소를 어떻게 가져올까? 암만봐도 생각나지 않는다.😥
단순히 스프레드를 사용해서
type Pop<T extends any[]> = [...T, unknown]
이렇게 마지막 요소를 가져올 수도 없다. 고민고민....
생각이 잘 안나서 추천수가 제일 많은 풀이를 봤다.
type Pop<T extends any[]> = T extends [...infer I, infer _] ? I : never
infer
키워드를 사용한다.
다 괜찮은데 마지막 하나에서 오류가 난다.
빈 배열에서 pop했을때, 빈 배열끼리 같아야한다.
type Pop<T extends any[]> = T extends [...infer P, unknown] ? P : []
배열 마지막 원소 자리를 unknwon
타입으로 둔다. 그리고 ...infer P
를 통하여 마지막 이전 원소라면 P
를 그대로 반환하고 아니라면 빈 배열을 반환한다.
이것도 영 이상하긴한데, 오류 없이 잘 동작한다.
그러나 never
대신 빈 배열을 할당해주는데...🤔