vuex中{dispatch,commit}的类型是什么?

时间:2018-05-16 15:54:42

标签: javascript vue.js vuejs2 flowtype vuex

我有vujes打字稿项目,在vuex商店我有类似的东西:

async getUserProfile ({ dispatch, commit }: any) {}

好吧,我不想要any,因为那很糟糕,你在编辑器中没有帮助/自动完成功能。我找到了这个import { Dispatch, Commit } from "vuex";,但是如何将该信息传递给{ dispatch, commit }: any

4 个答案:

答案 0 :(得分:1)

你没有对其进行破坏,而是使用ActionContext<S, R>,就像Vuex那样:

getUserProfile( context: ActionContext<S, R>) {}

其中SStateRRootState

然后您从上下文中调用dispatchcommit

 context.dispatch('action')
 context.commit('mutation')

答案 1 :(得分:1)

如果愿意,您仍然可以对上下文对象进行重构。

import { ActionContext } from 'vuex';
import { RootState } from './types';

const actions = {
    // destructured
    loadUser ({ commit }: ActionContext<RootState, RootState>, user: any) {
        commit('setUser', user);
    },

    // not destructured
    loadUser (context: ActionContext<RootState, RootState>, user: any) {
        context.commit('setUser', user);
    },
};

答案 2 :(得分:1)

你可以直接从 vuex 中导入 Commit 类型。

import { Commit } from "vuex";

并在这样的操作中使用:

changeNumber({ commit }: { commit: Commit }, new_number: number) {
  commit("setNewNumber", new_number);
}

答案 3 :(得分:0)

您可以在此文件中签出可用的vuex类型:

node_modules/vuex/types/index.d.ts

//第49行:

export interface Commit {
  (type: string, payload?: any, options?: CommitOptions): void;
  <P extends Payload>(payloadWithType: P, options?: CommitOptions): void;
}

您可以像这样导入和使用它而不是ActionContext:

import { Commit } from 'vuex';

const actions = {
    loadUser ({ commit }: { commit: Commit }, user: any) {
        commit('setUser', user);
    },

    ...
};

希望有帮助:)