더북(TheBook)

여기까지 배웠으면 이전 절에서 언급했던, 일부 속성만 옵셔널로 만드는 타입을 작성할 수 있습니다. Optional 타입은 lib.es5.d.ts에 있는 타입이 아닙니다.

type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>

type Result = Optional<{ a: 'hi', b: 123 }, 'a'>;
// type Result = { a?: 'hi', b: 123 }

일부 속성만 옵셔널로 만들려면 옵셔널이 될 속성과 아닌 속성을 구분해야 합니다. 옵셔널이 될 속성은 Pick으로 고른 뒤에 Partial을 적용하고({ a?: 'hi }), 아닌 속성들은 Omit<T, K>로 추리면 됩니다({ b : 123 }). 이 둘을 & 연산자로 합치면 Optional 속성이 됩니다. 헷갈리면 TK에 실제 타입을 넣어서 하나씩 결과 타입으로 바꾸면서 분석해보세요.

다음 절에서는 infer를 활용한 타입들을 살펴보겠습니다.

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