import { Observable } from 'rxjs';
import { t } from '../common';
declare type O = Record<string, unknown>;
export declare class Store<M extends O, E extends t.IStoreEvent> implements t.IStore<M, E> {
    static create<M extends O, E extends t.IStoreEvent>(args: t.IStoreArgs<M>): t.IStore<M, E>;
    private constructor();
    dispose(): void;
    private readonly _dispose$;
    private readonly _event$;
    private readonly _changing$;
    private readonly _changed$;
    private readonly _;
    readonly dispose$: Observable<void>;
    readonly changing$: Observable<t.IStateChanging<M, E>>;
    readonly changed$: Observable<t.IStateChange<M, E>>;
    readonly event$: Observable<t.IDispatch<M, E, E>>;
    get isDisposed(): boolean;
    get state(): M;
    dispatch(event: E): this;
    on<E2 extends E>(type: E2['type']): Observable<t.IDispatch<M, E2, E>>;
    private toDispatchEvent;
}
export {};
