我有vujes打字稿项目,在vuex商店我有类似的东西:
async getUserProfile ({ dispatch, commit }: any) {}
好吧,我不想要any
,因为那很糟糕,你在编辑器中没有帮助/自动完成功能。我找到了这个import { Dispatch, Commit } from "vuex";
,但是如何将该信息传递给{ dispatch, commit }: any
答案 0 :(得分:1)
你没有对其进行破坏,而是使用ActionContext<S, R>
,就像Vuex那样:
getUserProfile( context: ActionContext<S, R>) {}
其中S
是State
而R
是RootState
。
然后您从上下文中调用dispatch
和commit
:
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);
},
...
};
希望有帮助:)