더북(TheBook)

매핑된 객체 타입에서 키가 never이면 해당 속성은 제거됩니다. 따라서 다음과 같이 컨디셔널 타입과 함께 사용할 수 있습니다.

type OmitByType<O, T> = {
  [K in keyof O as O[K] extends T ? never : K]: O[K];
};
type Result = OmitByType<{
  name: string;
  age: number;
  married: boolean;
  rich: boolean;
}, boolean>;
/*
type Result = {
  name: string;
  age: number;
}
*/

OmitByType 타입은 특정 타입인 속성을 제거하는 타입으로, 예제에서는 boolean인 속성을 제거하고 있습니다. O[K] extends T ? never : K에서 속성의 타입이 T이면 never가 됩니다. 키가 never이면 해당 속성은 제거되므로 속성의 타입이 T인 속성들은 전부 제거됩니다.

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