두 인자를 받는 유틸리티 타입 Omit처럼, DeepOmit을 구현하라
Implement a typeDeepOmit, Like Utility types Omit, A type takes two arguments.
type DeepOmit<T,K> =
{
[R in keyof T as R extends K?never:R]:
K extends `${string}.${infer TargetKey}`?
DeepOmit<T[R],TargetKey>
:T[R]
}
mapped type을 사용했다.
key는 K와 같지 않은 key만 사용한다.
K가 .을 포함한다면 . 뒤에 있는 값과 모든 T[R]에서 . 뒤에 있는 값을 DeepOmit한 값을 반환한다.
K가 .을 포함하지 않는다면 그냥 T[R]을 반환한다.