declare namespace Vuex { class Store { constructor(options: StoreOption); state: S; dispatch(mutationName: string, ...args: any[]): void; dispatch

(mutation: MutationObject

): void; replaceState(state: S): void; watch(getter: Getter, cb: (value: T) => void, options?: WatchOption): void; hotUpdate(options: { mutations?: MutationTree; modules?: ModuleTree; }): void; on(event: string, cb: (...args: any[]) => void): void; once(event: string, cb: (...args: any[]) => void): void; off(event?: string, cb?: (...args: any[]) => void): void; emit(event: string, ...args: any[]): void; } function install(Vue: vuejs.VueStatic): void; interface StoreOption { state?: S; mutations?: MutationTree; modules?: ModuleTree; plugins?: Plugin[]; strict?: boolean; } type Getter = (state: S) => T; type Action = (store: Store, ...args: any[]) => any; type Mutation = (state: S, ...args: any[]) => void; type Plugin = (store: Store) => void; interface MutationTree { [key: string]: Mutation; } interface MutationObject

{ type: string; silent?: boolean; payload?: P; } interface Module { state: S; mutations: MutationTree; } interface ModuleTree { [key: string]: Module; } interface ComponentOption { getters: { [key: string]: Getter }; actions: { [key: string]: Action }; } interface WatchOption { deep?: boolean; immidiate?: boolean; } function createLogger(option: LoggerOption): Plugin; interface LoggerOption { collapsed?: boolean; transformer?: (state: S) => any; mutationTransformer?: (mutation: MutationObject) => any; } } declare namespace vuejs { interface ComponentOption { vuex?: Vuex.ComponentOption; store?: Vuex.Store; } interface Vue { $store?: Vuex.Store; } } declare module 'vuex' { export = Vuex } declare module 'vuex/logger' { export default Vuex.createLogger; }