import { EventEmitter } from './EventEmitter';
import { Dict } from './types/Dict';
import { J } from './types/interface/J';
import { V } from './types/interface/V';
import { Unlisten } from './types/Unlisten';
export declare type ObjectUpdateType = 'set' | 'delete';
export declare type ObjectNode = {
    emitter: EventEmitter | null;
    children: Dict<ObjectNode>;
};
export declare class Object_<T extends Object> implements J<T>, V<T> {
    private _obj;
    private _node;
    constructor(obj: T);
    private _obj_at_path;
    private _dispatch;
    _rec_dispatch: (current: string[], node: ObjectNode, type: ObjectUpdateType, path: string[], key: string, value: any) => void;
    _end_dispatch: (node: ObjectNode, type: ObjectUpdateType, path: string[], key: string, value: any) => void;
    private _ensure_emitter;
    private _remove_node;
    private _node_at_path;
    private _set_path;
    private _delete;
    private _delete_path;
    read(): Promise<T>;
    write(data: T): Promise<void>;
    get(name: string): Promise<any>;
    set(name: string, data: any): Promise<void>;
    hasKey(name: string): Promise<boolean>;
    delete(name: string): Promise<void>;
    pathGet(path: string[], name: string): Promise<any>;
    pathSet(path: string[], name: string, data: any): Promise<void>;
    pathDelete(path: string[], name: string): Promise<void>;
    keys(): Promise<string[]>;
    subscribe(path: string[], key: string, listener: (type: ObjectUpdateType, path: string[], key: string, data: any) => void): Unlisten;
}
