Hyperlinkv0.8.0-beta.28

Struct

Struct.Assigntypeeffect/Struct.ts:108
{
  [K in keyof (keyof T & keyof U extends never
    ? T & U
    : Omit<T, keyof T & keyof U> & U)]: (keyof T & keyof U extends never
    ? T & U
    : Omit<T, keyof T & keyof U> & U)[K]
}

Merges two object types with properties from U taking precedence over T on overlapping keys (like Object.assign at the type level).

When to use

Use when you need the type-level equivalent of { ...T, ...U }.

Details

When no keys overlap, this returns a simple intersection for efficiency. When keys overlap, the type from U wins.

Example (Merging two types with overlapping keys)

import type { Struct } from "effect"

type A = { a: string; b: number }
type B = { b: boolean; c: string }
type Merged = Struct.Assign<A, B>
// { a: string; b: boolean; c: string }
utility typesassignSimplify
Source effect/Struct.ts:1081 lines
export type Assign<T, U> = Simplify<keyof T & keyof U extends never ? T & U : Omit<T, keyof T & keyof U> & U>
Referenced by 2 symbols