/** * Check for equality by structure of two values * * Returns true if strict equality (`===`) returns true * * Values of different `typeof` return `false` * * Objects with different constructors return `false` * * Dates return true if both `>` and `<` return false * * ArrayBuffers return true when byteLength are equal and if values at all indexes are equal * * Arrays return true when lengths are equal and when values at all indexes pass `isEqual()` recursively * * Sets returns true when both are empty or when all keys equal on both * * Maps returns true when both are empty, when all keys equal on both, and when those key's values pass `isEqual()` recursively * * Dispatches to first argument's prototype method `equals: (other) => boolean` if exists * * Objects return true when both share same enumerable keys and all key's values pass `isEqual()` recursively * * Exceptions: * * Functions, Promises, WeakSets, and WeakMaps are checked by reference * * Notes: * * `isEqual({}, Object.create(null))` will always be `false`, regardless of keys/values because they don't share the same constructor * * @category Helpers * @returns boolean indicating whether the values are equal in value, structure, or reference */ export declare const isEqual: (x: T, y: T) => boolean;