typescript - Spesifiser Axios-responsstype på POST-forespørsel med kropp
Jeg prøver å spesifisere både JSON-bodyen og responstypen (som er forskjellige, noen prøver der ute har på en eller annen måte det samme for begge).
Feilmelding:
Argument av typen '{ grant_type: string; refresh_token: string; }' kan ikke tilordnes parameteren av typen 'AuthResponse'.
Objektliteralen kan bare spesifisere kjente egenskaper, og 'grant_type' finnes ikke i typen 'AuthResponse'.
Her er svaret jeg definerte som min type:
export interface AuthResponse {
token: string;
token_type: string;
access_token: string;
access_token_expires_at: string;
refresh_token: string;
refresh_token_expires_at: string;
}
Bruk av 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 er av typen {grant_type: ..., refresh_token: ...} i stedet for AuthResponse.
Fra de enkle JS-eksemplene er data kroppen for forespørselen, men jeg er ikke sikker på hvorfor det skulle bli tvunget til å være det samme for responsen, så jeg må gjøre noe veldig feil.
Rediger/Svar: Som påpekt i @jrsharpe sitt innlegg, er dette EN feil, de har også nettopp gitt ut v0.23.0 for noen timer siden. Den fikser bug #4116. Så bare oppgrader til 0.23.0+.
Svar #1
du kan skrive begge slik
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
}
