Skip to content

DeepAssign

Since v1.3.0

深度赋值属性,将一个对象类型的属性赋值到另一个。类似于 Object.assign,但递归操作嵌套对象,将源的所有属性赋值到目标。

签名

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
}

参数

参数说明
T目标对象类型
U源对象类型,从中赋值

示例

基本用法

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 }

覆盖嵌套属性

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 } }

基于 MIT 许可发布