<!-- Click "Preview" for a more readable version --

Please read and follow the instructions before submitting an issue:

- Read all our documentation, especially the [README](https://github.com/axios/axios/blob/master/README.md). It may contain information that helps you solve your issue.
- Ensure your issue isn't already [reported](https://github.com/axios/axios/issues?utf8=%E2%9C%93&q=is%3Aissue).
- If you aren't sure that the issue is caused by Axios or you just need help, please use [Stack Overflow](https://stackoverflow.com/questions/tagged/axios) or [our chat](https://gitter.im/mzabriskie/axios).
- If you're reporting a bug, ensure it isn't already fixed in the latest Axios version.
- Don't remove any title of the issue template, or it will be treated as invalid by the bot.

⚠️👆 Feel free to these instructions before submitting the issue 👆⚠️
-->

#### Describe the bug

The `use` method on AxiosInterceptorManager is defined as a generic method, allowing the caller to return an object (or void) which throws an error at runtime.

```typescript
export interface AxiosInterceptorManager<V> {
  use<T = V>(onFulfilled?: (value: V) => T | Promise<T>, onRejected?: (error: any) => any, options?: AxiosInterceptorOptions): number;
   // ^ this generic type parameter allows the caller to return _anything_
}
```

#### To Reproduce

The type definition allows a caller to write this:

```typescript
axios.interceptors.request.use((req) => {
  console.log("returning void from interceptor for request:", req.url)
})
const res = await axios.get("https://httpbin.org/get")
console.log("received:", res.data.url)
```

This type checks successfully but throws at runtime with the following exception:

```
TypeError: Cannot read properties of undefined (reading 'cancelToken')
    at throwIfCancellationRequested (/home/runner/UnwieldyAdeptArchitect/node_modules/axios/lib/core/dispatchRequest.js:13:14)
    at dispatchRequest (/home/runner/UnwieldyAdeptArchitect/node_modules/axios/lib/core/dispatchRequest.js:29:3)
    at null.go (/home/runner/UnwieldyAdeptArchitect/index.ts:7:15)
```

#### Expected behavior

Since request interceptors must return the config object, TypeScript should emit error TS2345:

> Argument of type '(res: AxiosRequestConfig) => void' is not assignable to parameter of type '(res: AxiosRequestConfig) => AxiosRequestConfig | Promise<AxiosRequestConfig>'

Similarly, if a response interceptor returns void, the same TypeScript error should be emitted telling the caller to return an `AxiosResponse` (or `Promise<AxiosResponse>`)


#### Environment
 - Axios Version 0.27.2
 - Node.js Version 16.13.2
 - TypeScript Version 4.4.4
 - Running on Repl.it

#### Additional context/Screenshots

I believe the generic type parameter should simply be removed from the `use` method, and any `T` replaced with `V`:

```typescript
export interface AxiosInterceptorManager<V> {
  use(onFulfilled?: (value: V) => V | Promise<V>, onRejected?: (error: any) => any, options?: AxiosInterceptorOptions): number;
  eject(id: number): void;
}
```

This type is used like so, which already allows for returning any type of `AxiosResponse` from the onFulfilled callback:

```typescript
interceptors: {
  request: AxiosInterceptorManager<AxiosRequestConfig>; // implicitly AxiosRequestConfig<any>
  response: AxiosInterceptorManager<AxiosResponse>;     // implicitly AxiosResponse<any>
}
```

Removing the generic type would mean these methods have the following signatures:

```typescript
export class Axios {
  interceptors: {
    request: {
      use(onFulfilled: (value: AxiosRequestConfig) => AxiosRequestConfig | Promise<AxiosRequestConfig>, /* ... */): number,
      // ...
    },
    response: {
      use(onFulfilled: (value: AxiosResponse) => AxiosResponse| Promise<AxiosResponse>, /* ... */): number,
      // ...
    }
  }
}
```
index.d.ts
HeaderSetter;
  getContentEncoding: AxiosHeaderGetter;
  hasContentEncoding: AxiosHeaderTester;
}
export type RawAxiosRequestHeaders = Partial<RawAxiosHeaders & MethodsHeaders & CommonHeaders>;
export type AxiosRequestHeaders = Partial<RawAxiosHeaders & MethodsHeaders & CommonHeaders> & AxiosHeaders;
export type RawAxiosResponseHeaders = Partial<Record<string, string> & {
  "set-cookie"?: string[]
}>;
export type AxiosResponseHeaders = RawAxiosResponseHeaders & AxiosHeaders;
export interface AxiosRequestTransformer {
  (this: AxiosRequestConfig, data: any, headers: AxiosRequestHeaders): any;
}
export interface AxiosResponseTransformer {
  (this: AxiosRequestConfig, data: any, headers: AxiosResponseHeaders, status?: number): any;
}
export interface AxiosAdapter {
  (config: AxiosRequestConfig): AxiosPromise;
}
export interface AxiosBasicCredentials {
  username: string;
  password: string;
}
export interface AxiosProxyConfig {
  host: string;
  port: number;
  auth?: {
    username: string;
    password: string;
  };
  protocol?: string;
}
export type Method =
    | 'get' | 'GET'
    | 'delete' | 'DELETE'
    | 'head' | 'HEAD'
    | 'options' | 'OPTIONS'
    | 'post' | 'POST'
    | 'put' | 'PUT'
    | 'patch' | 'PATCH'
    | 'purge' | 'PURGE'
    | 'link' | 'LINK'
    | 'unlink' | 'UNLINK';
export type ResponseType =
    | 'arraybuffer'
    | 'blob'
    | 'document'
    | 'json'
    | 'text'
    | 'stream';
export type responseEncoding =
    | 'ascii' | 'ASCII'
    | 'ansi' | 'ANSI'
    | 'binary' | 'BINARY'
    | 'base64' | 'BASE64'
    | 'base64url' | 'BASE64URL'
    | 'hex' | 'HEX'
    | 'latin1' | 'LATIN1'
    | 'ucs-2' | 'UCS-2'
    | 'ucs2' | 'UCS2'
    | 'utf-8' | 'UTF-8'
    | 'utf8' | 'UTF8'
    | 'utf16le' | 'UTF16LE';
export interface TransitionalOptions {
  silentJSONParsing?: boolean;
  forcedJSONParsing?: boolean;
  clarifyTimeoutError?: boolean;
}
export interface GenericAbortSignal {
  aborted: boolean;
  onabort: ((...args: any) => any) | null;
  add