在 VUEX 中创建动作类型的正确方法,当在一个动作模块内调度另一个突变模块时使用 {root: true}?

问题描述

我正在与 Typescript 一起探索 Vuex 模块。 我有一个关于 {root: true} 的问题。当在一个动作模块中调度另一个突变模块时。

例如:

模块一

export interface ActionsOneType {
    [ACTIONS_FETCH_DATA](
        {commit}: AugmentedActionContext
    ): void
}
export type MutationsOne<S = ModuleStateTypeOne> = {
    [MUTATIONS_MODULE_ONE](state: S,payload: S): void
}

export const actionsOne: ActionTree<ModuleStateTypeOne,ModuleStateTypeOne> & ActionsOne = {
    async [ACTIONS_FETCH_DATA]({commit}){
        try {
            commit(MUTATIONS_MODULE_TWO.SET_STATUS,'loading',{root: true}) // error in this line**
            const serverData = await getDataFromServer()
            commit(MUTATIONS_MODULE_ONE,serverData )
            commit(MUTATIONS_MODULE_TWO.SET_STATUS,'success',{root: true})// error in this line
        } catch (error){
            commit(MUTATIONS_MODULE_TWO.SET_ERROR_MESSAGE,error,{root: true}) // error in this line TS2554
        } finally {
             commit(MUTATIONS_MODULE_TWO.SET_STATUS,'Failed',{root: true})  // error in this line TS2554
        }
    }
}

模块二


export type MutationModuleTwo<S = ModuleStateTwo> = {
    [MUTATIONS_MODULE_TWO.SET_STATUS](state: S,payload: string): void
    [MUTATIONS_MODULE_TWO.SET_ERROR](state: S,payload: string): void
}


export const mutationsModuleTwo: MutationTree<ModuleStateTwo> & MutationModuleTwo= {
    [MUTATIONS_MODULE_TWO.SET_STATUS](state,payload) {
        state.status = payload
    },[MUTATIONS_MODULE_TWO.SET_ERROR](state,payload) {
        state.error = payload
    }
}

错误消息 - TS2554:需要 2 个参数,但得到 3 个

使用 root 属性 {root: true} 只是让 VUEX 存储知道我想分派其他模块,但参数 {root: true} 不使用 like payload 来改变另一个状态。

我不知道如何解决这个问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...