import type { Fn3, ICopy, IEmpty, IEquiv, IObjectOf, Maybe, Pair } from "@thi.ng/api";
import type { EquivMapOpts } from "./api.js";
export declare class EquivMap<K, V> extends Map<K, V> implements Iterable<Pair<K, V>>, ICopy<EquivMap<K, V>>, IEmpty<EquivMap<K, V>>, IEquiv {
    /**
     * Creates a new instance with optional initial key-value pairs and provided
     * options. If no `opts` are given, uses `ArraySet` for storing canonical
     * keys and
     * [`equiv`](https://docs.thi.ng/umbrella/equiv/functions/equiv.html) for
     * checking key equivalence.
     *
     * @param pairs - key-value pairs
     * @param opts - config options
     */
    constructor(pairs?: Iterable<Pair<K, V>> | null, opts?: Partial<EquivMapOpts<K>>);
    [Symbol.iterator](): IterableIterator<Pair<K, V>>;
    get [Symbol.species](): typeof EquivMap;
    get [Symbol.toStringTag](): string;
    get size(): number;
    clear(): void;
    empty(): EquivMap<K, V>;
    copy(): EquivMap<K, V>;
    equiv(o: any): boolean;
    delete(key: K): boolean;
    dissoc(keys: Iterable<K>): this;
    /**
     * The key & value args given the callback `fn` MUST be treated as
     * readonly/immutable. This could be enforced via TS, but would
     * break ES6 Map interface contract.
     *
     * @param fn -
     * @param thisArg -
     */
    forEach(fn: Fn3<V, K, Map<K, V>, void>, thisArg?: any): void;
    get(key: K, notFound?: V): Maybe<V>;
    has(key: K): boolean;
    set(key: K, value: V): this;
    into(pairs: Iterable<Pair<K, V>>): this;
    entries(): IterableIterator<Pair<K, V>>;
    keys(): IterableIterator<K>;
    values(): IterableIterator<V>;
    opts(): EquivMapOpts<K>;
}
export declare function defEquivMap<K, V>(pairs?: Iterable<Pair<K, V>> | null, opts?: Partial<EquivMapOpts<K>>): EquivMap<K, V>;
export declare function defEquivMap<V>(obj: IObjectOf<V>, opts?: Partial<EquivMapOpts<string>>): EquivMap<string, V>;
//# sourceMappingURL=equiv-map.d.ts.map