View all snippets

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;