type OnChangeCallback<T> = (value: T, unsubscribe: () => void) => void | Promise<void>;
type Subscriber<T> = {
    callback: OnChangeCallback<T> | null;
    subscriber: Subscriber<T> | null;
};
export declare class Observer<T> {
    #private;
    subscriber: Subscriber<T> | null;
    value: T;
    constructor(initValue: T, shouldUpdate?: (a: T, b: T) => boolean);
    get readonly(): {
        subscribe: (callback: OnChangeCallback<T>) => () => void;
        subscribeSync: (callback: OnChangeCallback<T>) => () => void;
        unsubscribe: (callback: OnChangeCallback<T>) => void;
        readonly value: T;
    };
    subscribe(callback: OnChangeCallback<T>): () => void;
    subscribeSync(callback: OnChangeCallback<T>): () => void;
    unsubscribe(callback: OnChangeCallback<T>): void;
    shouldUpdate(newValue: T, oldValue: T): boolean;
    set(value: T): boolean;
    asyncSet(value: T): Promise<boolean>;
}
export {};
