export function shallowEqual>( a: T, b: T ): boolean { if (Object.is(a, b)) return true; if (!a || !b) return false; const aKeys = Object.keys(a); const bKeys = Object.keys(b); if (aKeys.length !== bKeys.length) return false; for (let i = 0; i < aKeys.length; i++) { const key = aKeys[i]; if ( !Object.prototype.hasOwnProperty.call(b, key!) || !Object.is(a[key!], b[key!]) ) { return false; } } return true; }