Distributive Override
Override a property in an object in a union, preserving the union types.
export type Override<T, U> = Omit<T, keyof U> & U;
export type DistributiveOverride<
T,
K extends { [key in keyof T]?: unknown },
> = T extends { [key in keyof K]?: unknown } ? Override<T, K> : T;