declare global { // a set of generic object map interfaces // typescript does not currently define these interface StringMap { [key: string]: T; } interface NumberMap { [key: number]: T; } // some type constructs to support type outersection (i.e., type subtraction) type Diff = ({ [P in T]: P } & { [P in U1]: never } & { [x: string]: never })[T]; type Diff2 = ({ [P in T]: P } & { [P in U1]: never } & { [P in U2]: never } & { [x: string]: never })[T]; type Omit = Pick>; type Omit2 = Pick< T, Diff2 >; } export {};