매핑된 객체 타입에서 키가 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인 속성들은 전부 제거됩니다.