#### Describe the bug
`AxiosRequestHeaders` is currently only a `Record` for primitives `Record<string, string | number | boolean>` and, according to typing cannot have object as values. In reality, headers under keys can objects with other keys. A good example is from README:

```
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
```

#### To Reproduce
F.e. if we were to delete a header entry in `transformRequest` we would get a typescript error `Property 'Authorization' does not exist on type 'string'.`

```js
 return axios({
        method : 'get',
        transformRequest: (data, headers) => {
            delete headers?.common?.Authorization;
        }
    })
```

#### Expected behavior
To be able to access / delete headers under the whole list of keys common, post, etc

#### Environment
 - Axios Version 0.24.0
 - Adapter HTTP

#### Additional context/Screenshots
This is a typescript bug

index.d.ts
Omit<AxiosDefaults, 'headers'> & {
    headers: HeadersDefaults & {
      [key: string]: string | number | boolean | undefined
    }
  };
}
export interface GenericFormData {
  append(name: string, value: any, options?: any): any;
}
export interface AxiosStatic extends AxiosInstance {
  create(config?: CreateAxiosDefaults): AxiosInstance;
  Cancel: CancelStatic;
  CancelToken: CancelTokenStatic;
  Axios: typeof Axios;
  AxiosError: typeof AxiosError;
  readonly VERSION: string;
  isCancel(value: any): boolean;
  all<T>(values: Array<T | Promise<T>>): Promise<T[]>;
  spread<T, R>(callback: (...args: T[]) => R): (array: T[]) => R;
  isAxiosError<T = any, D = any>(payload: any): payload is AxiosError<T, D>;
  toFormData(sourceObj: object, targetFormData?: GenericFormData, options?: FormSerializerOptions): GenericFormData;
}
declare const axios: AxiosStatic;
export default axios;
