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

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