/**
 * Based on https://github.com/sindresorhus/type-fest/issues/610#issuecomment-2398118998
 */
import type { IsNever, KeysOfUnion, Simplify } from 'type-fest';

type _MergeUnionKnownKeys<BaseType, Keys extends keyof BaseType = keyof BaseType> = {
  [K in Keys]: Keys extends K ? BaseType[Keys] : never;
};

export type MergeUnion<BaseType> =
  IsNever<BaseType> extends false ?
    Simplify<
      _MergeUnionKnownKeys<BaseType> & {
        [K in KeysOfUnion<BaseType>]?: BaseType extends object ?
          K extends keyof BaseType ?
            BaseType[K]
          : never
        : never;
      }
    >
  : Record<string, never>;
