Vuex Typescript: полезная нагрузка объекта мутации всегда не определена

#typescript #vue.js #vuex #vuex-modules

#typescript #vue.js #vuex #vuex-модули

Вопрос:

Во время выполнения полезная нагрузка объекта, которую я передаю в качестве вторичного параметра моему методу мутации Vuex, всегда undefined . Оба моих файла Vuex и компонентов написаны на TypeScript.

Мой index.ts файл для моего хранилища Vuex выглядит следующим образом (обратите внимание, что я использую модульный подход к хранилищу):

 import Profile from '@/models/Profile'
import { createStore } from 'vuex'

const userModule = {
  state: () => ({
    profile: Profile
  }),
  mutations: {
    setProfile (state:any, profile: Profile) {
      // `state` is the local module state
      state.profile = profile //**RUNTIME ERROR: profile = undefined
    } 
  },
  getters: {
    getProfile (state:any) {
      return state.profile
    }
  }
}

export default createStore({
  state: {
  },
  mutations: {
  },
  actions: {
  },
  modules: {
    user: userModule
  }
})
 

Я фиксирую хранилище из моего компонента Vue methods следующим образом:

  <script lang="ts">
 export default Vue.extend({
    methods: {
      fetchProfile() {
        axios
            .get("/getUser", requestHeader)
            .then((profileResponse: Profile) => {
              //store profile in Vue Store
              store.commit('setProfile', profileResponse)
            })
      }
    }
 })
 </script>
 

Что я делаю не так?

Комментарии:

1. Является ли profileResponse определенно не неопределенным при его фиксации?

Ответ №1:

Обратный axios.get().then() вызов имеет параметр типа AxiosResponse , который переносит фактический ответ в его data свойство. Код должен выглядеть следующим образом:

 import axios, { AxiosResponse } from 'axios'

axios.get(/*...*/)
  .then((response: AxiosResponse) => {
    const profileResponse = response.data
    store.commit('setProfile', profileResponse)
  })