带有 Promise 的 typescript 响应类型

时间:2021-05-04 09:22:19

标签: typescript vue.js

如何设置响应变量的类型?

import axios from 'axios'

function postVueX (commit: (mutation: string, data: unknown) => void,
  dispatch: (mutation: string, data: string, options?: { root: boolean }) => void,
  url: string,
  data: unknown,
  mutation: string,
  emptyResult: unknown,
  method: () => void): Promise<void> {
  return Promise.resolve()
    .then(() => {
      return axios.post(url, data)
    })
    .then(response => {
      if (response) {
        if (mutation) {
          commit(mutation, response.data)
        }
        if (method) {
          method(response.data)
        }
      }
    }).catch(e => {
      if (mutation) {
        commit(mutation, emptyResult)
      }
      dispatch('notify/error', e.response.data.message, {
        root: true
      })
    })
}

linter 在 catch 中给了我这个错误: 对 any 值不安全的成员访问 .response。

2 个答案:

答案 0 :(得分:0)

“对任意值不安全的成员访问 .$axios。”只是意味着,vm 没有正确的类型定义,因此您应该自己创建一个或(首选)获得一个已经这样做的包。

答案 1 :(得分:0)

对不起,我是打字稿的新手 我做的你觉得呢?

export interface Erreur {
  message: string;
}

function isAxiosError (error: unknown): error is AxiosError {
  return (error as AxiosError).isAxiosError !== undefined
}

function postVueX (commit: (mutation: string, data: unknown) => void,
  dispatch: (mutation: string, data: string, options?: { root: boolean }) => void,
  url: string,
  data: unknown,
  mutation: string,
  emptyResult: unknown,
  method: (data: unknown) => void): Promise<void> {
  return Promise.resolve()
    .then(() => {
      return axios.post(url, data)
    })
    .then(response => {
      if (response) {
        if (mutation) {
          commit(mutation, response.data)
        }
        if (method) {
          method(response.data)
        }
      }
    }).catch(e => {
      let erreur = 'Erreur non trouvée'
      if (isAxiosError(e)) {
        const axiosError = e
        if (axiosError.response) {
          erreur = (<Erreur>(axiosError.response.data)).message
        }
      } else if (e instanceof Error) {
        erreur = e.message
      }
      if (mutation) {
        commit(mutation, emptyResult)
      }
      dispatch('notify/error', erreur, {
        root: true
      })
    })
}
相关问题