import { t } from '../common';
declare type O = Record<string, unknown>;
export declare class StateObject<T extends O, E extends t.Event<any>> implements t.IStateObjectWritable<T, E> {
    static create<T extends O, E extends t.Event<any> = any>(initial: T): t.IStateObjectWritable<T, E>;
    static readonly<T extends O, E extends t.Event<any> = any>(obj: t.IStateObjectWritable<T, E>): t.IStateObject<T, E>;
    static merge: <T_1 extends {
        [key: string]: Record<string, unknown>;
    }, E_1 extends t.Event<any> = any>(initial: T_1 | Record<keyof T_1, t.IStateObjectReadable<T_1[keyof T_1], t.Event<Record<string, unknown>>>>, dispose$?: import("rxjs").Observable<any> | undefined) => t.StateMerger<T_1, E_1>;
    static toObject<T extends O>(input: T): T;
    static isStateObject(input: any): boolean;
    private constructor();
    dispose(): void;
    private _state;
    private _dispose$;
    readonly dispose$: import("rxjs").Observable<void>;
    private readonly _event$;
    readonly event: t.IStateObjectEvents<T, E>;
    readonly original: T;
    get isDisposed(): boolean;
    get state(): T;
    get readonly(): t.IStateObjectReadable<T, E>;
    change: t.StateObjectChange<T, E>;
    private fire;
}
export {};
