export const mergeObjectsDeep = (obj1: T, obj2: U): T & U => { const mergedObj = { ...obj1 } as T & U for (const key in obj2) { if ( obj2[key] instanceof Object && !Array.isArray(obj2[key]) && obj1[key as never] ) { mergedObj[key] = mergeObjectsDeep(obj1[key as never], obj2[key]) } else { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore // eslint-disable-next-line no-prototype-builtins if (!mergedObj.hasOwnProperty(key)) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore mergedObj[key] = obj2[key] } } } return mergedObj }