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.
