import { Atom, IEnhancer, IInterceptable, IEqualsComparer, IListenable } 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; raw(): any; toJSON(): T; toString(): string; valueOf(): T; [Symbol.toPrimitive](): T; } export declare const isObservableValue: (x: any) => x is IObservableValue;