import * as React from "react";
type StoreValueMapType = Record<string, any>;
type StoreActionMapType = {
    [name: string]: (...args: any[]) => any;
};
type StoreActionMapHanlder<T extends StoreValueMapType, K extends keyof T, M extends StoreActionMapType> = {
    [Key in keyof M]: [
        callback: (getValues: () => Pick<T, K>, setValues: (values: Pick<T, K>) => void, ...args: Parameters<M[Key]>) => ReturnType<M[Key]>,
        ...deps: K[]
    ];
};
/**
 * 监听者模式
 * @template T - 预设的监听回调类型
 * @example
 * ```
 * new Store<{
 * "foo": [arg1: number, arg2: string],
 * "bar": [arg: boolean],
 * }>()
 * ```
 */
declare class Store<T extends StoreValueMapType> {
    /** 值 */
    values: T;
    /** 全局的数据变化钩子 */
    onValuesChange?: (values: T, prevValues: T) => void;
    private listeners;
    constructor(initialValue: T, onValuesChange?: (values: T, prevValues: T) => void);
    /**
     * 监听数据变化
     * @param names - 监听的字段名称
     * @param callback - 回调函数
     * @returns 解除监听数据变化
     */
    on<K extends keyof T>(names: K[], callback: (values: Pick<T, K>, prevValues: Pick<T, K>) => void): () => void;
    /**
     * 获取值
     * @param names - 值的名称
     */
    getValues<K extends keyof T>(names: K[]): Pick<T, K>;
    /**
     * 设置值
     * @param values - 设置值
     */
    setValues<K extends keyof T>(names: K[], values: Pick<T, K>): void;
}
declare function createStore<T extends StoreValueMapType, A extends StoreActionMapType = {}>(actionHandler: StoreActionMapHanlder<T, keyof T, A>): {
    /**
     * 使用 Store
     * @param names - 获取的 Store 字段
     * @returns [值, 修改值方法]
     */
    useStore<K extends keyof T>(names: K[]): [values: Pick<T, K>, setValues: (values: Pick<T, K>) => void];
    /**
     * 使用 Store (仅设置值)
     * @param names - 获取的 Store 字段
     * @returns 修改值方法
     */
    useStoreSetter<K extends keyof T>(names: K[]): (values: Pick<T, K>) => void;
    /**
     * 监听 Store 变化
     * @param names - Store 字段
     * @param callback - 监听变化的回调函数
     * @param deps - 依赖对象
     */
    watchStore<K extends keyof T>(names: K[], callback: (values: Pick<T, K>, prevValues: Pick<T, K>) => void, deps?: React.DependencyList | undefined): void;
    useStoreAction<N extends keyof A, F extends A[N]>(actionName: N): F;
    /**
     * Store Provider.
     * 内部组件均可和 store 交互
     */
    StoreProvider: {
        new (props: {
            initialValue: T;
            onValuesChange?: (value: T, prevValue: T) => void;
            children: React.ReactNode;
        }): {
            store: Store<T>;
            shouldComponentUpdate(nextProps: {
                initialValue: T;
                onValuesChange?: (value: T, prevValue: T) => void;
                children: React.ReactNode;
            }): boolean;
            render(): React.FunctionComponentElement<React.ProviderProps<Store<T> | null>>;
            context: any;
            setState<K extends never>(state: {} | ((prevState: Readonly<{}>, props: Readonly<{
                initialValue: T;
                onValuesChange?: (value: T, prevValue: T) => void;
                children: React.ReactNode;
            }>) => {} | Pick<{}, K> | null) | Pick<{}, K> | null, callback?: (() => void) | undefined): void;
            forceUpdate(callback?: (() => void) | undefined): void;
            readonly props: Readonly<{
                initialValue: T;
                onValuesChange?: (value: T, prevValue: T) => void;
                children: React.ReactNode;
            }> & Readonly<{
                children?: React.ReactNode | undefined;
            }>;
            state: Readonly<{}>;
            refs: {
                [key: string]: React.ReactInstance;
            };
            componentDidMount?(): void;
            componentWillUnmount?(): void;
            componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
            getSnapshotBeforeUpdate?(prevProps: Readonly<{
                initialValue: T;
                onValuesChange?: (value: T, prevValue: T) => void;
                children: React.ReactNode;
            }>, prevState: Readonly<{}>): any;
            componentDidUpdate?(prevProps: Readonly<{
                initialValue: T;
                onValuesChange?: (value: T, prevValue: T) => void;
                children: React.ReactNode;
            }>, prevState: Readonly<{}>, snapshot?: any): void;
            componentWillMount?(): void;
            UNSAFE_componentWillMount?(): void;
            componentWillReceiveProps?(nextProps: Readonly<{
                initialValue: T;
                onValuesChange?: (value: T, prevValue: T) => void;
                children: React.ReactNode;
            }>, nextContext: any): void;
            UNSAFE_componentWillReceiveProps?(nextProps: Readonly<{
                initialValue: T;
                onValuesChange?: (value: T, prevValue: T) => void;
                children: React.ReactNode;
            }>, nextContext: any): void;
            componentWillUpdate?(nextProps: Readonly<{
                initialValue: T;
                onValuesChange?: (value: T, prevValue: T) => void;
                children: React.ReactNode;
            }>, nextState: Readonly<{}>, nextContext: any): void;
            UNSAFE_componentWillUpdate?(nextProps: Readonly<{
                initialValue: T;
                onValuesChange?: (value: T, prevValue: T) => void;
                children: React.ReactNode;
            }>, nextState: Readonly<{}>, nextContext: any): void;
        };
        contextType?: React.Context<any> | undefined;
    };
};
type StoreProviderType = ReturnType<typeof createStore>["StoreProvider"];
export { Store, createStore, StoreProviderType, StoreValueMapType, StoreActionMapType, StoreActionMapHanlder };
