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.