【发布时间】:2020-09-10 17:38:26
【问题描述】:
我是 Typescript 的新手,正在尝试理解类型错误。在我简化的下面的代码中,函数ok 编译得很好,但是当我提取handleError 函数时,它不再进行类型检查。据我所知,代码是相同的,因为我所做的只是提取一个函数,但显然这里有一些我不明白的地方。你能帮我理解为什么会发生这种情况,是否有办法解决它?
这是编译好的代码
const ok = <T>(): Promise<AxiosResponse<T>> =>
axios.post<T>('http://example.com', {}, {}).catch(
(params: AxiosError<T>): Promise<AxiosResponse<T>> => {
return Promise.reject<AxiosResponse<T>>(params)
}
)
这是没有的代码。
const handleError = <T>(params: AxiosError<T>): Promise<AxiosResponse<T>> => {
return Promise.reject<AxiosResponse<T>>(params)
}
const notOk = <T>(): Promise<AxiosResponse<T>> =>
axios.post<T>('http://example.com', {}, {}).catch(handleError)
我得到的错误是
Type 'Promise<AxiosResponse<T> | AxiosResponse<{}>>' is not assignable to type 'Promise<AxiosResponse<T>>'.
Type 'AxiosResponse<T> | AxiosResponse<{}>' is not assignable to type 'AxiosResponse<T>'.
Type 'AxiosResponse<{}>' is not assignable to type 'AxiosResponse<T>'.
Type '{}' is not assignable to type 'T'. TS2322
46 | const notOk = <T>(): Promise<AxiosResponse<T>> =>
47 | axios.post<T>('http://example.com', {}, {}).catch(handleError)
> 48 |
| ^
我的猜测是某些类型信息丢失了,需要告知 handleError 是什么 T,但我不知道该怎么做。
这是一个codesandbox,以防它有助于检查。
【问题讨论】:
-
你能提供一些操场让任何人都可以更仔细地研究问题吗?
标签: typescript generics promise axios typescript-generics