import { Abon } from "./abon";
import { ChangeListener, UnsubscribeFn, ValueHandler } from "./types";
/** Subscribe to, retrieve, and asynchronously update a value, where an action to set a value can be interrupted.
 * `AbonAsync` is not intended to be used by itself, but rather to be extended and implementing the `set` method. */
export declare class AbonAsync<T> implements Omit<Abon<T>, "set" | "use"> {
    private __dispatchId?;
    private __previousDispatchId?;
    private __promiseNotifier?;
    current: T;
    constructor(initial?: T);
    set(valueOrPromise: T | Promise<T>, onSet?: () => void | Promise<void>): Promise<this>;
    set(promise: Promise<T>, onSet?: () => void | Promise<void>): Promise<this>;
    set(value: T): Promise<this>;
    dispatch<T>(promise: Promise<T>, onUninterrupted: (resolved: T) => void | Promise<void>): Promise<this>;
    get promise(): Promise<T>;
    subscribe(listener: ChangeListener<T>): UnsubscribeFn;
    handle(handler: ValueHandler<T>): UnsubscribeFn;
    use(): this;
    useSubscription(listener: ChangeListener<T>, deps?: readonly any[]): void;
    useHandler(handler: ValueHandler<T>, deps?: readonly any[]): void;
    notify(): void;
    static use<T>(initial?: () => T, deps?: readonly any[]): AbonAsync<T>;
    static useRef<T>(initial?: () => T, deps?: readonly any[]): AbonAsync<T>;
}
