export declare type Watcher<T> = (val: T, prev: T) => void;
export declare type Listener<T> = (val: T) => void;
declare class Observable<T> {
    protected listeners: Array<{
        event: Listener<T>;
        selector?: (state: T) => any;
    }>;
    protected initialValue: T;
    protected value: T;
    protected watchers: Array<Watcher<T>>;
    protected timeouts: any[];
    constructor(value: T);
    get(): T;
    set(val: T): void;
    watch(handler: (state: T, prev: T) => void): () => void;
}
export default Observable;
