#### Describe the bug
Axios has been using the `AbortController` from the DOM library since version 0.22.0 (# 3305). Since then, the DOM library has to be stored in tsconfig.json. Without DOM the new version is breaking for our setup and can no longer be used.

#### To Reproduce
Use `axios.get()` without DOM Library. To reproduce change `tsconfig.json` to eg.:

```
...
    "lib": ["ES2020"],
...
```

#### Expected behavior
axios should work without DOM. Maybe there is an alternative for `AbortController`?

#### Environment
 - Axios Version 0.22.0
 - Adapter http
 - Browser none
 - Node.js Version 14.18.0
 - OS: macOS 11.6

#### Additional context/Screenshots
Given Exception:

```
> @smirowstanitzok/trendytag-sdk@3.1.2 build /home/runner/work/trendytag-sdk/trendytag-sdk
> tsc

Error: node_modules/axios/index.d.ts(81,12): error TS2304: Cannot find name 'AbortSignal'.
Error: src/index.ts(189,13): error TS2322: Type 'unknown' is not assignable to type 'AxiosResponse<ContactFormResponse> | undefined'.
  Type 'unknown' is not assignable to type 'AxiosResponse<ContactFormResponse>'.
Error: src/index.ts(189,88): error TS2345: Argument of type 'ContactForm' is not assignable to parameter of type 'ContactFormResponse'.
  Property 'messageId' is missing in type 'ContactForm' but required in type 'ContactFormResponse'.
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! @smirowstanitzok/trendytag-sdk@3.1.2 build: `tsc`
npm ERR! Exit status 2
npm ERR! 
npm ERR! Failed at the @smirowstanitzok/trendytag-sdk@3.1.2 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/runner/.npm/_logs/2021-10-01T08_27_20_612Z-debug.log
Error: Process completed with exit code 2.
```
index.d.ts
N = "ERR_BAD_OPTION";
  static readonly ERR_NETWORK = "ERR_NETWORK";
  static readonly ERR_DEPRECATED = "ERR_DEPRECATED";
  static readonly ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE";
  static readonly ERR_BAD_REQUEST = "ERR_BAD_REQUEST";
  static readonly ERR_CANCELED = "ERR_CANCELED";
  static readonly ECONNABORTED = "ECONNABORTED";
  static readonly ETIMEDOUT = "ETIMEDOUT";
}
export class CanceledError<T> extends AxiosError<T> {
}
export type AxiosPromise<T = any> = Promise<AxiosResponse<T>>;
export interface CancelStatic {
  new (message?: string): Cancel;
}
export interface Cancel {
  message: string | undefined;
}
export interface Canceler {
  (message?: string): void;
}
export interface CancelTokenStatic {
  new (executor: (cancel: Canceler) => void): CancelToken;
  source(): CancelTokenSource;
}
export interface CancelToken {
  promise: Promise<Cancel>;
  reason?: Cancel;
  throwIfRequested(): void;
}
export interface CancelTokenSource {
  token: CancelToken;
  cancel: Canceler;
}
export interface AxiosInterceptorOptions {
  synchronous?: boolean;
  runWhen?: (config: AxiosRequestConfig) => boolean;
}
export interface AxiosInterceptorManager<V> {
  use<T = V>(onFulfilled?: (value: V) => T | Promise<T>, onRejected?: (error: any) => any, options?: AxiosInterceptorOptions): number;
  eject(id: number): void;
}
export class Axios {
  constructor(config?: AxiosRequestConfig);
  defaults: AxiosDefaults;
  interceptors: {
    request: AxiosInterceptorManager<AxiosRequestConfig>;
    response: AxiosInterceptorManager<AxiosResponse>;
  };
  getUri(config?: AxiosRequestConfig): string;
  request<T = any, R = AxiosResponse<T>, D = any>(config: AxiosRequestConfig<D>): Promise<R>;
  get<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
  delete<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D>): Promise<R>;
  head<T = any, R = AxiosResponse<T>, D = any>(url: string, config?: AxiosRequestConfig<D