对象工具

deepMergeObject

深度合并两个键值对对象,返回一个新对象。支持递归合并嵌套对象和数组。

ts
declare function deepMergeObject<T extends Record<string, any>, U extends Record<string, any>>(
  target: T,
  source: U,
  options?: DeepMergeObjectOptions
): T & U

参数

参数类型说明
targetRecord<string, any>目标对象
sourceRecord<string, any>源对象,属性将合并到目标对象
optionsDeepMergeObjectOptions可选配置

DeepMergeObjectOptions 选项

属性类型默认值说明
allowMergeUndefinedbooleanfalse是否允许将 undefined 值合并到目标对象
mergeArraybooleantrue是否合并数组(拼接),false 则直接覆盖

示例

tsx
import { deepMergeObject } from 'vitarx'

const defaults = {
  theme: 'light',
  fontSize: 14,
  plugins: ['core'],
  layout: { sidebar: true, header: true }
}

const userConfig = {
  theme: 'dark',
  plugins: ['chart'],
  layout: { sidebar: false }
}

// 深度合并,数组默认拼接
const config = deepMergeObject(defaults, userConfig)
// {
//   theme: 'dark',
//   fontSize: 14,
//   plugins: ['core', 'chart'],
//   layout: { sidebar: false, header: true }
// }

popProperty

从对象中弹出(移除并返回)指定属性。

ts
declare function popProperty<T extends object, K extends keyof T>(obj: T, key: K): T[K]
参数类型说明
objT目标对象
keyK要弹出的属性键

返回值:被弹出属性的值,属性不存在时返回 undefined

tsx
import { popProperty } from 'vitarx'

const options = { name: 'Vitarx', version: 4, debug: true }
const debug = popProperty(options, 'debug')

console.log(debug) // true
console.log(options.debug) // undefined(已移除)

toArray

将值转换为数组。如果已经是数组则直接返回,否则包装成单元素数组。

ts
declare function toArray<T>(val: T | T[]): T[]
tsx
import { toArray } from 'vitarx'

toArray('hello') // ['hello']
toArray(['a', 'b']) // ['a', 'b']
toArray(42) // [42]

下一步