import { EventEmitter_ } from './EventEmitter';
import { ObjectUpdateType } from './ObjectUpdateType';
import { Callback } from './types/Callback';
import { Dict } from './types/Dict';
import { J } from './types/interface/J';
import { V } from './types/interface/V';
import { Unlisten } from './types/Unlisten';
export type ObjectNode = {
    emitter: EventEmitter_ | null;
    children: Dict<ObjectNode>;
};
export declare class Object_<T extends Dict<any> = Dict<any>> implements J<T>, V<T> {
    private _obj;
    private _node;
    constructor(obj: T);
    dispatch: (type: ObjectUpdateType, path: string[], key: string, value: any) => void;
    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(callback: Callback<T>): void;
    write(data: T, callback: Callback<undefined>): void;
    get<K extends keyof T>(name: K): Promise<any>;
    set<K extends keyof T>(name: K, data: any): Promise<void>;
    hasKey(name: string): Promise<boolean>;
    delete<K extends keyof T>(name: K): Promise<void>;
    deepGet(path: string[]): Promise<any>;
    deepSet(path: string[], data: any): Promise<void>;
    deepDelete(path: string[]): Promise<void>;
    keys(): Promise<string[]>;
    subscribe(path: string[], key: string, listener: (type: ObjectUpdateType, path: string[], key: string, data: any) => void): Unlisten;
}
