composite.js
Version:
A polyfill for the TC39 Composites proposal: structured immutable objects with well-defined equality.
39 lines (32 loc) • 940 B
TypeScript
export interface CompositeObject {
readonly [key: string]: any;
};
export interface Composite {
/**
* Create a new composite object from a plain object.
* @param object A plain object
*/
(object: object): CompositeObject;
/**
* Create a new composite from a list of values (ordinal composite)
* @param args Values for the composite
*/
of(...args: any[]): CompositeObject;
/**
* Check if two composites are equal
* @param a First composite
* @param b Second composite
*/
equal(a: CompositeObject, b: CompositeObject): boolean;
/**
* Check if a value is a composite
* @param value Value to check
*/
isComposite(value: any): value is CompositeObject;
/**
* Restore the native behavior of Map and Set, disabling structural equality for composites.
*/
unpatch(): void;
};
declare const Composite: Composite;
export default Composite;