export interface Options<T> {
    compare?: (a: unknown, b: unknown) => boolean;
    clone?: (state: T) => T;
    use?: ((store: Store<T>) => void)[];
}
type State = Record<string, any>;
export type Selector<T, U = unknown> = (state: T) => U;
export interface Subscriber<T, U = unknown> {
    (state: T, prevState: T): void;
    $$subscriber?: symbol;
    $$selectorState?: U;
    $$selector?: Selector<T, U>;
}
export interface Store<T = State> {
    $$store: symbol;
    getState: () => T;
    setState: (fn: (state: T) => Partial<T>, force?: boolean) => void;
    subscribe: {
        <U>(subscriber: Subscriber<T, U>, selector?: (State: T) => U): () => boolean;
    };
    getServerState: () => T;
}
type InitializerFn<T> = (getState: Store<T>['getState'], setState: Store<T>['setState']) => T;
export declare function createStore<T extends State, U = InitializerFn<T> | T>(initializer?: U, options?: Options<T>): Readonly<{
    $$store: symbol;
    getState: () => T;
    setState: (fn: (state: T) => Partial<T>, force?: boolean | undefined) => void;
    subscribe: <U_1>(subscriber: Subscriber<T, U_1>, selector?: ((State: T) => U_1) | undefined) => () => boolean;
    getServerState: () => T;
    resetState: (state?: unknown | null) => void;
    destroy: () => void;
}>;
export {};
