javascript - Typescript-fel vid anrop av axios - ingen överlagring matchar detta anrop


Jag anropar axios och skickar in ett konfigurationsobjekt som följande:

const req = { method, url, timeout: 300000, headers: { 'Content-Type': 'application/json' } }

axios(req)

Jag får ett TypeScript-fel som säger "No overload matches this call". Axios-funktionen tar ett konfigurationsobjekt av typen AxiosRequestConfig:

axios(config: AxiosRequestConfig): AxiosPromise<any>

Som referens, här är hur typen AxiosRequestConfig ser ut, tillsammans med typen Method:

interface AxiosRequestConfig {
  url?: string;
  method?: Method;
  baseURL?: string;
  transformRequest?: AxiosTransformer | AxiosTransformer[];
  transformResponse?: AxiosTransformer | AxiosTransformer[];
  headers?: any;
  params?: any;
  paramsSerializer?: (params: any) => string;
  data?: any;
  timeout?: number;
  timeoutErrorMessage?: string;
  withCredentials?: boolean;
  adapter?: AxiosAdapter;
  auth?: AxiosBasicCredentials;
  responseType?: ResponseType;
  xsrfCookieName?: string;
  xsrfHeaderName?: string;
  onUploadProgress?: (progressEvent: any) => void;
  onDownloadProgress?: (progressEvent: any) => void;
  maxContentLength?: number;
  validateStatus?: (status: number) => boolean;
  maxRedirects?: number;
  socketPath?: string | null;
  httpAgent?: any;
  httpsAgent?: any;
  proxy?: AxiosProxyConfig | false;
  cancelToken?: CancelToken;
}

type Method =
  | 'get' | 'GET'
  | 'delete' | 'DELETE'
  | 'head' | 'HEAD'
  | 'options' | 'OPTIONS'
  | 'post' | 'POST'
  | 'put' | 'PUT'
  | 'patch' | 'PATCH'
  | 'link' | 'LINK'
  | 'unlink' | 'UNLINK'

Jag förstår inte detta fel, eftersom det verkar som att mitt konfigurationsobjekt uppfyller detta gränssnitt helt okej. Och här är där det blir extra förvirrande för mig: om jag ändrar typdefinitionen för AxiosRequestConfig så att

method?: String;

istället för

method?: Method

Då försvinner TypeScript-felet. Dessutom, om jag försöker sprida ut i mitt konfigurationsobjekt och manuellt lägga till en metod-egenskap som följande:

axios({...req, method: 'GET'})

Felet försvinner igen. Men jag måste lägga till metod-egenskapen i... om jag bara sprider in mitt konfigurationsobjekt får jag samma fel som tidigare.

Så det verkar som att felet kan vara kopplat till metod-egenskapen i AxiosRequestConfig-gränssnittet, men i slutändan är jag inte säker. Tack för all hjälp.

Svar #1

Detta är ett mycket enkelt svar.

lägg till

AxiosRequestKonfiguration

i ditt importuttryck på det här sättet

import axios, { AxiosRequestConfig, AxiosResponse} from 'axios';

och sedan gå ner till där din konfigurationskod är och tilldela bara AxiosRequestConfig gränssnittet till din konfigurationsvariabel så här

const config: AxiosRequestConfig = {
      method: 'get',
      url: `${quickbooksBaseURL}/v3/company/${QuickbooksCustomerID}/invoice/${invoiceID}/pdf?minorversion=${minorVersion}`,
      headers: {
        'Content-Type': 'application/json',
        Authorization: `Bearer ${accessToken}`
      }
    };
    const response: AxiosResponse = await axios(config);

gör detta arbete för mig och jag hoppas att det också kommer att fungera för dig.

Relaterade artiklar