Skip to content

DeepAssign

Since v1.3.0

Deep assign properties from one object type to another. Similar to Object.assign but operates recursively on nested objects, assigning all properties from the source to the target.

Signature

typescript
export type DeepAssign<T, U> = {
	[K in keyof T | keyof U]: K extends keyof U
		? U[K] extends Record<string, any>
			? K extends keyof T
				? T[K] extends Record<string, any>
					? DeepAssign<T[K], U[K]>
					: U[K]
				: U[K]
			: U[K]
		: K extends keyof T
			? T[K]
			: never
}

Parameters

ParameterDescription
TThe target object type
UThe source object type to assign from

Examples

Basic Usage

typescript
import type { DeepAssign } from 'uni-types'

type Target = { a: number; b: { c: string } }
type Source = { b: { d: boolean }; e: number }
type Result = DeepAssign<Target, Source>
// { a: number; b: { c: string; d: boolean }; e: number }

Overwriting Nested Properties

typescript
import type { DeepAssign } from 'uni-types'

type Config = { database: { host: string; port: number }; cache: { ttl: number } }
type Override = { database: { host: string }; cache: { enabled: boolean } }
type Assigned = DeepAssign<Config, Override>
// { database: { host: string; port: number }; cache: { ttl: number; enabled: boolean } }

Released under the MIT License.