In the changelog of 2.8, they have this example for conditional types:
type Diff = T extends U ? never : T; // Remove types from T that are assi
Well, leveraging your Diff
type from earlier (which by the way is the same as the Exclude
type which is now part of the standard library), you can write:
type ObjectDiff<T, U> = Pick<T, Diff<keyof T, keyof U>>;
type AWithoutStuff = ObjectDiff<A, Stuff>; // inferred as { one: string; two: number; }