# index.d.ts

看起来是一个规范文件，约束了 axios 的所有 api，这里就看几个常规的

### AxiosRequestConfig

```javascript
export 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;
}

```

这个就是 axios 的请求配置参数约束，常用的几个就是：

* `url`：请求的路径
* `method`： 请求的方法（`get`、`post`、`put`，`delete`）
* `headers`：请求头（推荐不自定义）
* `params`：路径参数
* `data`：`post` 参数
* `responseType`：响应数据类型
* `onUploadProgress`：上传进度
* `cancelToken`：取消传输 `token`

### AxiosResponse

```javascript
export interface AxiosResponse<T = any>  {
  data: T;
  status: number;
  statusText: string;
  headers: any;
  config: AxiosRequestConfig;
  request?: any;
}
```

这个是 `Axios` 响应对象的约束，可以清晰的看到它返回了一个标准的 `http` 相应对象：

* `data`：响应数据
* `status`：状态码
* `statusText`：状态文本
* `headers`：响应头
* `config`：配置
* `request`：请求体

### AxiosInstance

```javascript
export interface AxiosInstance {
  (config: AxiosRequestConfig): AxiosPromise;
  (url: string, config?: AxiosRequestConfig): AxiosPromise;
  defaults: AxiosRequestConfig;
  interceptors: {
    request: AxiosInterceptorManager<AxiosRequestConfig>;
    response: AxiosInterceptorManager<AxiosResponse>;
  };
  getUri(config?: AxiosRequestConfig): string;
  request<T = any, R = AxiosResponse<T>> (config: AxiosRequestConfig): Promise<R>;
  get<T = any, R = AxiosResponse<T>>(url: string, config?: AxiosRequestConfig): Promise<R>;
  delete<T = any, R = AxiosResponse<T>>(url: string, config?: AxiosRequestConfig): Promise<R>;
  head<T = any, R = AxiosResponse<T>>(url: string, config?: AxiosRequestConfig): Promise<R>;
  options<T = any, R = AxiosResponse<T>>(url: string, config?: AxiosRequestConfig): Promise<R>;
  post<T = any, R = AxiosResponse<T>>(url: string, data?: any, config?: AxiosRequestConfig): Promise<R>;
  put<T = any, R = AxiosResponse<T>>(url: string, data?: any, config?: AxiosRequestConfig): Promise<R>;
  patch<T = any, R = AxiosResponse<T>>(url: string, data?: any, config?: AxiosRequestConfig): Promise<R>;
}
```

这个就是 axios 本 axios 了，约束了 axios 对象属性

提供了各种方法：

* `get`：发送 `get` 请求
* `post`：发送 `post` 请求
* `config`：请求配置
* `getUri`：获取资源路径

### AxiosError

```javascript
export interface AxiosError<T = any> extends Error {
  config: AxiosRequestConfig;
  code?: string;
  request?: any;
  response?: AxiosResponse<T>;
  isAxiosError: boolean;
  toJSON: () => object;
}
```

这个是 axios 的错误对象

他有自带一个 toJSON 方法可以将错误对象转成 json
