타입 챌린지 57 - Get Required

소파의 벨로그·2025년 6월 20일

타입챌린지

목록 보기
118/131

문제 링크

문제

모든 필수 필드를 남기는 고급 유틸 타입 GetRequired<T>를 구현하라

Implement the advanced util type GetRequired<T>, which remains all the required fields

내 풀이

type RequiredKey<T,K = keyof T>=
  K extends keyof T?
    Pick<T,K> extends Required<Pick<T,K>>?K:never
  :never

type GetRequired<T> = {[R in RequiredKey<T>]:R extends keyof T?T[R]:never}

Required인 키 들을 뽑아내서 mapped type에 할당하는 방식으로 구현했다.

Required인 키를 뽑아내는 방식은 다음과 같다.

T에서 모든 키 별로 모든 값을 뽑아낸다.
ex){a:1,b?:2}라면 {a:1}|{b?:2}
이렇게 뽑아낸 값에 required를 붙여본다.

뽑아낸 값과 required를 붙인 값이 같으면 해당 키는 required, 그렇지 않다면 partial인 키라는 의미이다.

0개의 댓글