import _Vue = require("vue"); import { WatchOptions } from "vue"; // augment typings of Vue.js import "./vue"; export * from "./helpers"; export declare class Store<S> { constructor(options: StoreOptions<S>); readonly state: S; readonly getters: any; replaceState(state: S): void; dispatch: Dispatch; commit: Commit; subscribe<P extends MutationPayload>(fn: (mutation: P, state: S) => any): () => void; watch<T>(getter: (state: S) => T, cb: (value: T, oldValue: T) => void, options?: WatchOptions): () => void; registerModule<T>(path: string, module: Module<T, S>): void; registerModule<T>(path: string[], module: Module<T, S>): void; unregisterModule(path: string): void; unregisterModule(path: string[]): void; hotUpdate(options: { actions?: ActionTree<S, S>; mutations?: MutationTree<S>; getters?: GetterTree<S, S>; modules?: ModuleTree<S>; }): void; } export declare function install(Vue: typeof _Vue): void; export interface Dispatch { (type: string, payload?: any, options?: DispatchOptions): Promise<any>; <P extends Payload>(payloadWithType: P, options?: DispatchOptions): Promise<any>; } export interface Commit { (type: string, payload?: any, options?: CommitOptions): void; <P extends Payload>(payloadWithType: P, options?: CommitOptions): void; } export interface ActionContext<S, R> { dispatch: Dispatch; commit: Commit; state: S; getters: any; rootState: R; rootGetters: any; } export interface Payload { type: string; } export interface MutationPayload extends Payload { payload: any; } export interface DispatchOptions { root?: boolean; } export interface CommitOptions { silent?: boolean; root?: boolean; } export interface StoreOptions<S> { state?: S; getters?: GetterTree<S, S>; actions?: ActionTree<S, S>; mutations?: MutationTree<S>; modules?: ModuleTree<S>; plugins?: Plugin<S>[]; strict?: boolean; } export type Getter<S, R> = (state: S, getters: any, rootState: R, rootGetters: any) => any; export type Action<S, R> = (injectee: ActionContext<S, R>, payload: any) => any; export type Mutation<S> = (state: S, payload: any) => any; export type Plugin<S> = (store: Store<S>) => any; export interface Module<S, R> { namespaced?: boolean; state?: S | (() => S); getters?: GetterTree<S, R>; actions?: ActionTree<S, R>; mutations?: MutationTree<S>; modules?: ModuleTree<R>; } export interface GetterTree<S, R> { [key: string]: Getter<S, R>; } export interface ActionTree<S, R> { [key: string]: Action<S, R>; } export interface MutationTree<S> { [key: string]: Mutation<S>; } export interface ModuleTree<R> { [key: string]: Module<any, R>; }