我试图指定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
}