export declare type Observer = (value: T) => void; export declare function observableValue(initialValue: T): WritableObservableValue; export declare abstract class ObservableValue { abstract get value(): T; protected observers: Set>; protected notify(): void; subscribe(observer: Observer): () => void; map(transform: (_: T) => U): ObservableValue; } export declare class MappedObservableValue extends ObservableValue { private observedValue; private readonly transform; private currentInput?; private currentOutput?; constructor(transform: (_: T) => U, observedValue: ObservableValue); get value(): U; } export declare class CombinedObservableValue extends ObservableValue { private observedValues; constructor(...observedValues: ObservableValue[]); get value(): any[]; } export declare function combine(t: ObservableValue, u: ObservableValue): ObservableValue<[T, U]>; export declare function combine(t: ObservableValue, u: ObservableValue, v: ObservableValue): ObservableValue<[T, U, V]>; export declare function combine(t: ObservableValue, u: ObservableValue, v: ObservableValue, w: ObservableValue): ObservableValue<[T, U, V, W]>; export declare function combine(t: ObservableValue, u: ObservableValue, v: ObservableValue, w: ObservableValue, x: ObservableValue): ObservableValue<[T, U, V, W, X]>; export declare function combine(...o: ObservableValue[]): ObservableValue; export declare class WritableObservableValue extends ObservableValue { private _value; get value(): T; set value(newValue: T); constructor(initialValue: T); get asReadOnly(): ReadOnlyObservableValue; } export declare class ReadOnlyObservableValue extends ObservableValue { private observedValue; constructor(observedValue: ObservableValue); get value(): T; } export declare abstract class ObservableObject { static key(this: new () => T): string; key(): string; }