typescript - 带有 Promise 的 typescript 响应类型
问题描述
如何设置响应变量的类型?
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 中给了我这个错误: Unsafe member access .response on an any
value。
解决方案
抱歉,我是打字稿的新手,我这样做了,您怎么看?
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
})
})
}
推荐阅读
- laravel - 在段落标签中显示文本框值
- python - Python matplotlib colorbars:全部在最后一个轴上
- python - 使用 BeautifulSoup 从 html 文件中提取特定文本
- php - 如何从 Laravel 的集合中删除选定的项目?
- sql-server - 根据创建日期对表进行分区
- kubernetes-helm - 如何在其他变量循环中使用 .Values
- python - 查找包含特定文本的 td 的下一个兄弟并将其存储在变量中
- javascript - 使用 javascript 显示从 tempImage 到 imgsrc 的图像
- c# - MVVM 搜索栏 Xamarin.Forms
- php - ES:按日期排序字段需要启用字段数据