如何设置响应变量的类型?
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。
答案 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
})
})
}