| 244 | } |
| 245 | |
| 246 | export function deepMergedCopy<T1 extends Record<string, any>, T2 extends Record<string, any>>( |
| 247 | targetObj: T1, |
| 248 | obj: T2 |
| 249 | ) { |
| 250 | const resultObj = { ...targetObj } as T1 & T2; |
| 251 | |
| 252 | Object.keys(obj).forEach((prop: keyof T2) => { |
| 253 | if (isObject(resultObj[prop])) { |
| 254 | if (Array.isArray(obj[prop])) { |
| 255 | resultObj[prop as keyof T1 & T2] = deepCopyArray(obj[prop]); |
| 256 | } else if (resultObj.hasOwnProperty(prop)) { |
| 257 | resultObj[prop] = deepMergedCopy(resultObj[prop], obj[prop]); |
| 258 | } else { |
| 259 | resultObj[prop as keyof T1 & T2] = deepCopy(obj[prop]); |
| 260 | } |
| 261 | } else { |
| 262 | resultObj[prop as keyof T1 & T2] = obj[prop]; |
| 263 | } |
| 264 | }); |
| 265 | |
| 266 | return resultObj; |
| 267 | } |
| 268 | |
| 269 | export function deepCopyArray<T extends Array<any>>(items: T): T { |
| 270 | return items.map((item: T[number]) => { |