type MustOneOf<T> = {
  [K in keyof T]: Required<Pick<T, K>> & Partial<Record<Exclude<keyof T, K>, never>>;
}[keyof T];

type PromiseOr<T> = Promise<T> | T;

type ImmerUpdater<T> = (draft: T) => T | void;
