import { ObjWatchEvt } from "@iyio/common";
export interface ObjectBindingOptions<T extends Record<string, any>> {
    obj: T;
}
export declare abstract class ObjectBinding<T extends Record<string, any>> {
    readonly obj: T;
    private readonly disposeListener;
    constructor({ obj, }: ObjectBindingOptions<T>);
    private _isDisposed;
    get isDisposed(): boolean;
    dispose(): void;
    protected _dispose(): void;
    abstract sync(evt: ObjWatchEvt<T>): void;
}
export declare class FnObjectBinding<T extends Record<string, any>> extends ObjectBinding<T> {
    private readonly _sync;
    constructor(obj: T, sync: (evt: ObjWatchEvt<T>) => void);
    private deferredEvt;
    sync(evt: ObjWatchEvt<T>): void;
}
