import { Action } from "@reduxjs/toolkit";
import { ThunkAction } from "redux-thunk";
import { InteropStore } from "./types";
/**
 * Each module should export its bit of initial state. Note that we're not using redux slices because
 * those prevent state changes across slices of state. Our modules are allowed to cross state, though it should still
 * be avoided if at all possible because of the risk of race conditions.
 */
export declare const initialState: InteropStore;
/**
 * This is our proprietaty createReducer() derived from RTK's version. See createReducer.ts for docs.
 */
export declare const reducer: import("../../common/redux/createReducer").Reducer<InteropStore, import("../../common/redux/createReducer").AnyAction>;
declare const store: import("redux").Store<InteropStore, import("../../common/redux/createReducer").AnyAction> & {
    dispatch: <T extends Action<any>>(promise: Promise<T>) => Promise<T>;
};
/**
 * Be sure to initialize *after* creating the store. Here, a module may dispatch any actions (or AsyncThunks) that are
 * necessary before starting to run.
 * e.g. Loading state from config.
 */
export declare const initializeModules: () => void;
/**
 * Boilerplate type stuff, which is mostly not used. Just in case we need it someday...
 */
export declare type RootState = ReturnType<typeof reducer>;
export declare type AppDispatch = typeof store.dispatch;
export declare type AppThunk = ThunkAction<void, RootState, unknown, Action<string>>;
export declare type StoreType = typeof store;
export default store;
//# sourceMappingURL=store.d.ts.map