Type Alias Merge<A, B, Options>
Merge: Or< IsAny<A>, IsAny<B>, { $else: Or< IsNever<A>, IsNever<B>, { $else: IsDisjoint<A, B> extends true ? A & B : [keyof A, keyof B] extends [ infer KA extends KeyTypes, infer KB extends KeyTypes, ] ? IsLiteral<KA> extends true ? IsLiteral<KB> extends true ? [OptionalKeys<(...)
>, OptionalKeys<(...)
>] extends [ infer PKA extends (...)
, infer PKB extends (...)
, ] ? (...)
& (...)
& (...)
& (...)
: never : ((...)
extends (...)
? (...)
: (...))
& (
(...)
extends (...)
? (...)
: (...)
)
& ((...)
extends (...)
? (...)
: (...))
: IsLiteral<KB> extends true ? { [k in Exclude<(...)
, (...)
>]: (...)
[(...)
] } & { [k in keyof (...)
]: (...)
[(...)
] } : ((...)
extends (...)
? (...)
: (...))
& (
(...)
extends (...)
? (...)
: (...)
)
& ((...)
extends (...)
? (...)
: (...))
: never; $then: never; }, >; $then: any; },>
⚗️ transform 🔢 customizable
Merges type
A
and typeB
.This type performs the same operations as
{ ...a, ...b }
but at the type level.It handles cases like A or B are
Record
, joining between required and optional props, etc.