import { EventEmitter_ } from './EventEmitter';
import { ObjectUpdateType } from './ObjectUpdateType';
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(): T;
    write(data: T): void;
    get<K extends keyof T>(name: K): any;
    set<K extends keyof T>(name: K, data: any): void;
    hasKey(name: string): boolean;
    delete<K extends keyof T>(name: K): void;
    deepGet(path: string[]): any;
    deepSet(path: string[], data: any): void;
    deepDelete(path: string[]): void;
    deepHas(path: string[]): boolean;
    keys(): string[];
    subscribe(path: string[], key: string, listener: (type: ObjectUpdateType, path: string[], key: string, data: any) => void): Unlisten;
}
