/**
 * <A> must be object.
 * For string, number e.t.c use Set instead
 * */
export declare class HashedArray<A extends object> {
    mapper: (a: A) => PropertyKey;
    array: A[];
    o: {
        [key: string]: A;
    };
    constructor(mapper?: (a: A) => PropertyKey, array?: A[], o?: {
        [key: string]: A;
    });
    insert(x: A, key?: PropertyKey): this;
    replace(x: A, key?: PropertyKey): this;
    update(x: A, key?: PropertyKey): this;
    /**
     * insert or replace
     * */
    upsert(x: A, key?: PropertyKey): this;
    remove(x: A): this;
    removeByKey(key: PropertyKey): this;
    isEmpty(isValid: (x: A) => boolean): boolean;
    clear(): A[];
    get(key: PropertyKey): A | undefined;
    has(key: PropertyKey): boolean;
    set(key: PropertyKey, x: A): this;
    static from<A extends object>(xs: A[]): HashedArray<A>;
}
