interface Subscription<T> {
    id: number;
    fn: (value: T, prevValue: T) => void;
    condition: (value: T) => boolean;
    once: boolean;
}
export declare class Observable<T> {
    private _nextId;
    protected subscribers: Subscription<T>[];
    protected _value: T;
    protected _dispose?: () => void;
    constructor(value: T);
    get value(): T;
    set(fn: (prevValue: T) => T): boolean;
    setValue(newValue: T): boolean;
    subscribe(subscriber: (newValue: T, prevValue: T) => void, opts?: {
        fireImediately?: boolean;
        once?: boolean;
        condition?: (value: T) => boolean;
    }): () => void;
    when(condition: (value: T) => boolean, opts?: {
        timeoutMs: number;
        description?: string;
    }): Promise<T>;
    unsubscribe(subscriber: (value: T, prevValue: T) => void): void;
    map<U>(fn: (value: T, prevValue: T, prevResult?: U) => U): Observable<U>;
    throttle(ms: number): Observable<T>;
    dispose(): void;
    private notify;
    private _notify;
}
export {};
//# sourceMappingURL=observable.d.ts.map