import type { Comparator } from '../types.js';
import { Array2 } from './array2.js';
export interface SortedArrayOptions<T> {
    /**
     * Defaults to undefined.
     * Undefined (default comparator) works well for String keys.
     * For Number keys - use comparators.numericAsc (or desc),
     * otherwise sorting will be wrong (lexicographic).
     */
    comparator?: Comparator<T>;
}
/**
 * Like Array, but keeps values sorted after every insertion.
 */
export declare class SortedArray<T> extends Array2<T> {
    #private;
    constructor(values?: Iterable<T>, opt?: SortedArrayOptions<T>);
    push(...values: T[]): number;
    unshift(...values: T[]): number;
    splice(start: number, deleteCount?: number, ...items: T[]): T[];
    static get [Symbol.species](): ArrayConstructor;
    get [Symbol.toStringTag](): string;
    private resort;
}
export declare class SortedStringArray extends SortedArray<string> {
    constructor(values?: Iterable<string>);
    get [Symbol.toStringTag](): string;
}
export declare class SortedNumberArray extends SortedArray<number> {
    constructor(values?: Iterable<number>);
    get [Symbol.toStringTag](): string;
}
