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'

Relaterade artiklar