Javascript 如何使用Typescript正确设置axios客户端?

Javascript 如何使用Typescript正确设置axios客户端?,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,这就是我到目前为止所做的: type TRequest = { url: string; method?: EMethodTypes; params?: TParams; body?: TBody; }; export const httpClient = async <Result>( { url, method = EMethodTypes.GET, params = {}, body = {} }: TRequest ): Promis

这就是我到目前为止所做的:

type TRequest = {
    url: string;
    method?: EMethodTypes;
    params?: TParams;
    body?: TBody;
};

export const httpClient = async <Result>(
    { url, method = EMethodTypes.GET, params = {}, body = {} }: TRequest
): Promise<AxiosResponse<Result>> =>
    await axios({
        url,
        method,
        params,
        data: JSON.stringify(body),
        headers: {
            'Content-Type': 'application/json',
        }
      });
类型TRequest={
url:string;
方法:E方法类型;
参数?:t图;
主体?:t主体;
};
导出常量httpClient=async(
{url,method=EMethodTypes.GET,params={},body={}}:TRequest
):承诺=>
等待axios({
网址,
方法,,
params,
数据:JSON.stringify(body),
标题:{
“内容类型”:“应用程序/json”,
}
});
但当我试图提出请求时

const { user, token } = await httpClient<{user: TUser; token: string}>({
  url: apiRoutes.POST.AUTH.LOGIN,
  method: EMethodTypes.POST,
  body: formData,
});
const{user,token}=wait-httpClient({
url:apirouts.POST.AUTH.LOGIN,
方法:EMethodTypes.POST,
正文:formData,
});
我犯了个错误

const { user, token } = await httpClient<{user: TUser; token: string}>({
        ^^^^
Property 'user' does not exist on type 'AxiosResponse<{ user: any; token: string; }>'.
const{user,token}=wait-httpClient({
^^^^
类型“AxiosResponse”上不存在属性“user”。

考虑到我已经指出了这两个属性,我不确定我在这里做错了什么。

我不熟悉axios,但从类型:


这意味着,如果要获取
用户
,需要从
AxiosResponse.data

像所有http客户端一样,响应主体是响应内部的嵌套属性(在本例中为
数据
),请按如下所示修改代码:

const { data: { user, token } } = await httpClient<{ user: TUser; token: string }>({
  url: apiRoutes.POST.AUTH.LOGIN,
  method: EMethodTypes.POST,
  body: formData,
})
const{data:{user,token}}=wait-httpClient({
url:apirouts.POST.AUTH.LOGIN,
方法:EMethodTypes.POST,
正文:formData,
})
或者可选地:

const { user, token } = (await httpClient<{ user: TUser; token: string }>({
  url: apiRoutes.POST.AUTH.LOGIN,
  method: EMethodTypes.POST,
  body: formData,
})).data
const{user,token}=(等待httpClient({
url:apirouts.POST.AUTH.LOGIN,
方法:EMethodTypes.POST,
正文:formData,
})).数据