Axios + Typescript: hur skickar man en parameter av typen "ResponseType"?
Axios definierar ResponseType som
export type ResponseType =
| 'arraybuffer'
| 'blob'
| 'document'
| 'json'
| 'text'
| 'stream'
Jag försöker skicka en konfiguration till axios.post
const config = {
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/x-www-form-urlencoded',
'Host': HOST_HEADER,
},
responseType: 'json'
}
const data_to_post = { .... omitted ... }
return axios.post(HOST, data_to_post, config)
Problem: typescript linter varnar mig och säger att typen string inte kan tilldelas typen ResponseType.
Försökte också: Självklart kan jag inte använda syntaxen
responseType: ResponseType.json
Hur kan jag fixa detta?
Svar #1
Problemet är att Typescript kommer att härleda config till att vara av typen
{
headers: {
'X-Requested-With': string;
'Content-Type': string;
'Host-Header': string;
};
responseType: string;
}
Typescript vet inte att du försöker skapa ett konfigurationsobjekt för Axios. Du kan uttryckligen ange typen för hela objektet som AxiosRequestConfig, eller så kan du uttryckligen ange responseType: 'json' för att vara av typen ResponseType.
const config: AxiosRequestConfig = {
headers: {
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/x-www-form-urlencoded',
'Host-Header': 'dsa',
},
responseType: 'json'
};
Svar #2
Fixat med hjälp av explicit typomvandling
responseType: <ResponseType> 'json'
