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,
})).数据