import { Atom, IEnhancer, IInterceptable, IEqualsComparer, IInterceptor, IListenable, Lambda } from "../internal"; export interface IValueWillChange { object: IObservableValue; type: "update"; newValue: T; } export type IValueDidChange = { type: "update"; observableKind: "value"; object: IObservableValue; debugObjectName: string; newValue: T; oldValue: T | undefined; }; export type IBoxDidChange = { type: "create"; observableKind: "value"; object: IObservableValue; debugObjectName: string; newValue: T; } | IValueDidChange; export interface IObservableValue { get(): T; set(value: T): void; } export declare class ObservableValue extends Atom implements IObservableValue, IInterceptable>, IListenable { enhancer: IEnhancer; name_: string; private equals; hasUnreportedChange_: boolean; interceptors_: any; changeListeners_: any; value_: any; dehancer: any; constructor(value: T, enhancer: IEnhancer, name_?: string, notifySpy?: boolean, equals?: IEqualsComparer); private dehanceValue; set(newValue: T): void; private prepareNewValue_; setNewValue_(newValue: T): void; get(): T; intercept_(handler: IInterceptor>): Lambda; observe_(listener: (change: IValueDidChange) => void, fireImmediately?: boolean): Lambda; raw(): any; toJSON(): T; toString(): string; valueOf(): T; [Symbol.toPrimitive](): T; } export declare const isObservableValue: (x: any) => x is IObservableValue;