在带有body的post request上指定Axios响应类型



我试图指定JSON主体和响应类型(这是不同的,有些样本在某种程度上对两者都有相同的)。

错误信息:

类型为'{grant_type: string;refresh_token:字符串;} '不能赋值给'AuthResponse'类型的参数。
对象字面量只能指定已知的属性,而'grant_type'类型"AuthResponse"中不存在。

这是我定义为我的类型的响应:

export interface AuthResponse {
token: string;
token_type: string;
access_token: string;
access_token_expires_at: string;
refresh_token: string;
refresh_token_expires_at: string;
}

使用axios:

axios
.post<AuthResponse>(
secrets.authURL,//Defined in enclosing class
{
grant_type: this.grantType,//Defined in enclosing class
refresh_token: this.authPayload,//Defined in enclosing class
},//<-- Defined as data and conflicts with AuthResponse
{
headers: {
Authorization: this.getAuthHeader(),//Defined in enclosing class
"Content-Type": this.contentType,///Defined in enclosing class
},
}
)
.then((axiosResp) => {
const response = axiosResp.data;//<-- Not the type I'd expect
});

axiosResp.data的类型为{grant_type: ..., refresh_token: ...},而不是AuthResponse

从普通JS示例中,数据是请求的主体,但不确定为什么它会被强制为响应相同,所以我必须做一些非常错误的事情。

编辑/答:正如@jrsharpe的评论所指出的,这是一个bug,他们几个小时前刚刚发布了v0.23.0。它修复了错误#4116。所以升级到0.23.0+吧。

你可以像这样输入

interface AuthResponse {
token: string;
token_type: string;
access_token: string;
access_token_expires_at: string;
refresh_token: string;
refresh_token_expires_at: string;
}
interface TBody {
grant_type: string
refresh_token: string
}
const t = async (): Promise<void> => {
const data = await axios.post<AuthResponse, AxiosResponse<AuthResponse, TBody>, TBody>("theurl", {
grant_type: 'kjkjk',
refresh_token: "dddf",
}, {
headers: {
Authorization: "dfdfds",
"Content-Type": "application/json",
},
})
const resu: AuthResponse = data.data
}

相关内容

  • 没有找到相关文章

最新更新