export declare type Observer = (v: T) => void; export declare type Updater = (v: T) => T; export interface IObservable { addObserver(observer: Observer): void; removeObserver(observer: Observer): void; update(updater: Updater): void; } export declare class Observable implements IObservable { private provider; private clz; private observers; constructor(provider: IProvider, clz: { new (...args: any[]): M; }); addObserver(observer: Observer): void; removeObserver(observer: Observer): void; update(updater: Updater): void; } export interface IProvider { provide(obj: Object): void; acquire(clz: { new (...args: any[]): T; }): T | undefined; remove(clz: { new (...args: any[]): T; }): void; clear(): void; observe(clz: { new (...args: any[]): T; }): Observable; } export declare class Provider implements IProvider { private provision; private observableMap; provide(obj: Object): void; acquire(clz: { new (...args: any[]): T; }): T | undefined; remove(clz: new (...args: any[]) => T): void; clear(): void; observe(clz: new (...args: any[]) => T): Observable; }