export type PathItem = string | number;
export type LazyActiveValue = Array<any> | Record<string, any>;
export interface ChangeListener {
    (triggerPath: PathItem[][]): void;
}
export interface UpdateFn<T extends LazyActiveValue> {
    (oldValue: T): void;
}
export type UnpackLazyActiveObject<T extends Record<string, any>> = {
    [K in keyof T]: T[K] extends LazyActive<infer R> ? R : T[K];
};
export default class LazyActive<T extends LazyActiveValue> {
    private value;
    private changeListeners;
    constructor(defaultValue: T);
    private triggerListener;
    updateValue(fn: UpdateFn<T> | T): void;
    updateValueByPath(path: PathItem[], value: any): void;
    getValue<R>(path?: PathItem[]): R;
    addChangeListener(fn: ChangeListener): () => void;
}
