// taken from https://stackoverflow.com/questions/27936772/how-to-deep-merge-instead-of-shallow-merge const isObject = (obj: any) => obj && typeof obj === 'object'; export function mergeDeep(...objects: any[]): any { return objects.reduce((prev, obj) => { Object.keys(obj).forEach((key) => { const pVal = prev[key]; const oVal = obj[key]; if (Array.isArray(pVal) && Array.isArray(oVal)) { prev[key] = pVal.concat(...oVal); } else if (isObject(pVal) && isObject(oVal)) { prev[key] = mergeDeep(pVal, oVal); } else { prev[key] = oVal; } }); return prev; }, {}); }