더북(TheBook)

이번에는 어떠한 타입에서 지정한 타입만 추출해내는 Extract 타입을 만들어보겠습니다.

type MyExtract<T, U> = T extends U ? T : never;
type Result = MyExtract<1 | '2' | 3, string>;
// type Result = "2"

Extract 타입은 Exclude 타입과 하는 행동이 반대입니다. 컨디셔널 타입의 참, 거짓 부분만 서로 바꾸면 됩니다.

다음은 특정 객체에서 지정한 속성을 제거하는 Omit 타입입니다.

type MyOmit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
type Result = MyOmit<{ a: '1', b: 2, c: true }, 'a' | 'c'>;
// type Result = { b: 2 }

Omit 타입은 Pick 타입과 반대되는 행동을 합니다. 그러면서 Omit 타입은 PickExclude 타입을 활용합니다.

먼저 Exclude<keyof T, K>를 하여 지정한 속성을 제거합니다. 'a' | 'b' | 'c' 중에 'a' | 'c'를 지정했으니 'b'만 추려집니다. Pick 타입을 통해 객체에서 추려낸 속성을 선택합니다. 최종적으로 'b' 속성만 있는 객체 타입이 남게 됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.