What causes the compiler to produce different results for these two mapped types?
type NonNullableObj1<O> = {[Key in keyof O] : O[Key] extends null ? never : O[Key]}
type NotNull<T> = T extends null ? never : T;
type NonNullableObj2<T> = {[P in keyof T]: NotNull<T[P]>}
type Nullable = {prop: string | null};
type ResultOf1 = NonNullableObj1<Nullable>; // { prop: string | null }
type ResultOf2 = NonNullableObj2<Nullable>; // { prop: string }