MergeLeft<Source, Target>Left-biased merge of two object types where keys from Source take
precedence over Target on conflict.
When to use
Use when you want left-biased merging where the first argument wins.
Details
Implemented as MergeRight<Target, Source>.
Example (Merging with left bias)
import type { Types } from "effect"
type Result = Types.MergeLeft<
{ a: number; b: number },
{ a: string; c: boolean }
>
// { a: number; b: number; c: boolean }export type type MergeLeft<Source, Target> = {
[K in keyof (Source & {
[Key in keyof Target as Key extends keyof Source
? never
: Key]: Target[Key]
})]: (Source & {
[Key in keyof Target as Key extends keyof Source
? never
: Key]: Target[Key]
})[K]
} extends infer B
? B
: never
Left-biased merge of two object types where keys from Source take
precedence over Target on conflict.
When to use
Use when you want left-biased merging where the first argument wins.
Details
Implemented as MergeRight<Target, Source>.
Example (Merging with left bias)
import type { Types } from "effect"
type Result = Types.MergeLeft<
{ a: number; b: number },
{ a: string; c: boolean }
>
// { a: number; b: number; c: boolean }
MergeLeft<function (type parameter) Source in type MergeLeft<Source, Target>Source, function (type parameter) Target in type MergeLeft<Source, Target>Target> = type MergeRight<Target, Source> = {
[K in keyof (Source & {
[Key in keyof Target as Key extends keyof Source
? never
: Key]: Target[Key]
})]: (Source & {
[Key in keyof Target as Key extends keyof Source
? never
: Key]: Target[Key]
})[K]
} extends infer B
? B
: never
Right-biased merge of two object types where keys from Source take
precedence over Target on conflict.
When to use
Use when you want right-biased merging where the second argument wins.
Details
The result is automatically simplified via
Simplify
.
Example (Right-biased merge)
import type { Types } from "effect"
type Result = Types.MergeRight<
{ a: number; b: number },
{ a: string; c: boolean }
>
// { a: string; b: number; c: boolean }
MergeRight<function (type parameter) Target in type MergeLeft<Source, Target>Target, function (type parameter) Source in type MergeLeft<Source, Target>Source>