带有 Promise 的 typescript 响应类型
Posted
技术标签:
【中文标题】带有 Promise 的 typescript 响应类型【英文标题】:typescript type of response with Promise 【发布时间】:2021-07-26 15:19:26 【问题描述】:如何设置响应变量的类型?
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 中给了我这个错误:
不安全的成员访问 .response 对 any
值。
【问题讨论】:
vm 是从哪里来的?请提供一个最低限度的可重现示例。 【参考方案1】:“任何值上的不安全成员访问 .$axios。”只是意味着,没有适当的 vm 类型定义,因此您应该自己创建一个或(首选)获取一个已经完成它的包。
【讨论】:
对不起,好的错误是:Unsafe member access .response on anany
value。
这似乎是您捕获的错误的缺失类型。我的建议是检查所有错误并首先修复它们。在缺少的地方添加类型,你得到的错误会更有用。
@franfrLor 您的函数 isAxiosError 没有有效的返回类型(应该是布尔值)并且您没有将 const axiosError = e
转换为您定义的类型【参考方案2】:
对不起,我是打字稿的新手 我这样做了,你怎么看?
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
)
)
【讨论】:
以上是关于带有 Promise 的 typescript 响应类型的主要内容,如果未能解决你的问题,请参考以下文章
Typescript:Promise 的子类/扩展:不引用 Promise 兼容的构造函数值
typescript async函数必需返回promise么