모든 필수 키를 유니온으로 뽑아내는 상급 유틸 타입 RequiredKeys<T>를 구현하라라
Implement the advanced util type RequiredKeys<T>, which picks all the required keys into a union.
type RequiredKeysImplement<T,K = keyof T>=K extends keyof T?
Pick<T,K> extends Required<Pick<T,K>>?K:never
:never
type RequiredKeys<T> = RequiredKeysImplement<T>
GetRequired 풀이에서 나왔던 값을 그대로 사용했다.
추가적으로 사용처에서 구현용 제네릭을 사용하지 못하게 하기 위해 구현과 실제 타입을 분리했다.