添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

axios的最新封装,解决类型AxiosRequestConfig不能赋值给InternalAxiosReqe;CreateAxiosDefaults不能赋值给AxiosRequestConfig

最新推荐文章于 2024-02-28 00:51:57 发布
最新推荐文章于 2024-02-28 00:51:57 发布 阅读量5.2k
① 类型CreateAxiosDefaults不能赋值给AxiosRequestConfig

类型"CreateAxiosDefaults<any>'的参数不能赋给类型“AxiosRequestConfig<any>”的参数。
属性headers'的类型不兼容。
不能将类型"AxiosHeaders|Partial<HeadersDefaults>|Partial<RawAxiosHeaders&{Accept:
AxiosHeaderValue;"Content-Length":AxiosHeaderValue;"User-Agent":AxiosHeaderValue;"Content-
Encoding'":AxiosHeaderValue;Authorization:AxiosHeaderValue;}&{..;}>|undefined'分配给类型
"AxiosHeaders (Partial<RawAxiosHeaders Accept:AxiosHeaderValue;"Content-Length":
AxiosHeaderValue;"User-Agent":AxiosHeaderValue;"Content-Encoding":AxiosHeaderValue;
Authorization:AxiosHeaderValue;}{...;}>Partial<...>)undefined".
不能将类型Partial<HeadersDefaults>P分配给类型“AxiosHeaders|(Partial<RawAxiosHeaders&{
Accept:AxiosHeaderValue;"Content-Length":AxiosHeaderValue;"User-Agent":AxiosHeaderValue;
"Content-Encoding":AxiosHeaderValue;Authorization:AxiosHeaderValue;}{...;}>
Partial<...>)undefined”。
不能将类型Partial<HeadersDefaults>”分配给类型Partial<RawAxiosHeaders&{Accept
:

通过查看源码我们可以发现 ,原来的类型AxiosRequestConfig已变成了CreateAxiosDefaults。但CreateAxiosDefaults又继承了AxiosRequestConfig。

② 类型AxiosRequestConfig不能赋值给 InternalAxiosRequestConfig

类型“(config:AxiosRequestConfig<any>)=>AxiosRequestConfig<any>'的参数不能赋给类型“(value:
InternalAxiosRequestConfig<any>)=>InternalAxiosRequestConfig<any>
Promise<InternalAxiosRequestConfig<any>>'的参数。
不能将类型"AxiosRequestConfig<any>'分配给类型"InternalAxiosRequestConfig<any>
Promise<InternalAxiosRequestConfig<any>>".
不能将类型“AxiosRequestConfig<any>”分配给类型"InternalAxiosRequestConfig<any>”。
属性headers的类型不兼容。
不能将类型"AxiosHeaders|(Partial<RawAxiosHeaders&{Accept:AxiosHeaderValue;"Content-
Length":AxiosHeaderValue;"User-Agent":AxiosHeaderValue;"Content-Encoding":AxiosHeaderValue;
Authorization:AxiosHeaderValue;}&{...;}>&Partial<...>)|undefined分配给类型
"AxiosRequestHeaders”。
不能将类型undefined'分配给类型“AxiosRequestHeaders”。
不能将类型undefined'分配给类型"Partial<RawAxiosHeaders&{Accept:AxiosHeaderValue;

同理查看源码,可以发现request的最新类型为 InternalAxiosRequestConfig,InternalAxiosRequestConfig又继承于 AxiosRequestConfig。

以上两种继承,父类的作用范围是小于子类的

解决方法:

原先axios.create中CreateAxiosDefaults类型的改变影响不大,继续使用它的父类AxiosRequestConfig。

改变的地方:在使用拦截器时,使用InternalAxiosRequestConfig而不使用AxiosRequestConfig

完整代码如下:
import axios from 'axios'
import type {
  AxiosInstance,
  AxiosRequestConfig,
  InternalAxiosRequestConfig,
  AxiosResponse
} from 'axios'
interface HYRequestInterceptors {
  requestInterceptor?: (
    config: InternalAxiosRequestConfig
  ) => InternalAxiosRequestConfig
  requestInterceptorCatch?: (error: any) => any
  responseInterceptor?: (res: AxiosResponse) => AxiosResponse
  responseInterceptorCatch?: (error: any) => any
interface HYRequestConfig extends AxiosRequestConfig {
  interceptors?: HYRequestInterceptors
class HYRequest {
  instance: AxiosInstance
  interceptors?: HYRequestInterceptors
  constructor(config: HYRequestConfig) {
    this.instance = axios.create(config)
    this.interceptors = config.interceptors
    this.instance.interceptors.request.use(
      this.interceptors?.requestInterceptor,
      this.interceptors?.requestInterceptorCatch
    this.instance.interceptors.response.use(
      this.interceptors?.responseInterceptor,
      this.interceptors?.responseInterceptorCatch
  request(config: AxiosRequestConfig) {
    this.instance.request(config).then((res) => {
      console.log(res)
export default HYRequest
 进行模块化处理后:

request/type.ts

import {
  InternalAxiosRequestConfig,
  AxiosResponse,
  AxiosRequestConfig
} from 'axios'
export interface HYRequestInterceptors {
  requestInterceptor?: (
    config: InternalAxiosRequestConfig
  ) => InternalAxiosRequestConfig
  requestInterceptorCatch?: (error: any) => any
  responseInterceptor?: (res: AxiosResponse) => AxiosResponse
  responseInterceptorCatch?: (error: any) => any
export interface HYRequestConfig extends AxiosRequestConfig {
  interceptors?: HYRequestInterceptors

 request/index.ts

import axios from 'axios'
import type { AxiosInstance, AxiosRequestConfig } from 'axios'
import type { HYRequestInterceptors, HYRequestConfig } from './type'
class HYRequest {
  instance: AxiosInstance
  interceptors?: HYRequestInterceptors
  constructor(config: HYRequestConfig) {
    this.instance = axios.create(config)
    this.interceptors = config.interceptors
    this.instance.interceptors.request.use(
      this.interceptors?.requestInterceptor,
      this.interceptors?.requestInterceptorCatch
    this.instance.interceptors.response.use(
      this.interceptors?.responseInterceptor,
      this.interceptors?.responseInterceptorCatch
  request(config: AxiosRequestConfig) {
    this.instance.request(config).then((res) => {
      console.log(res)
export default HYRequest

  index.ts

// service统一出口
import HYRequest from './request'
import { BASE_URL, TIME_OUT } from './request/config'
const hyRequest = new HYRequest({
  baseURL: BASE_URL,
  timeout: TIME_OUT,
  interceptors: {
    requestInterceptor: (config) => {
      console.log('请求成功的拦截')
      return config
    requestInterceptorCatch: (err) => {
      console.log('请求失败的拦截')
      return err
    responseInterceptor: (res) => {
      console.log('请求成功的拦截')
      return res
    responseInterceptorCatch: (err) => {
      console.log('响应成功的拦截')
      return err
export default hyRequest
拦截器的种写法可以参考我其他博客,这里先不写了
axios的最新封装,解决类型AxiosRequestConfig不能赋值给InternalAxiosReqe;CreateAxiosDefaults不能赋值给AxiosRequestConfig 关于axios+ts+vue的封装解决类型"CreateAxiosDefaults'的参数不能赋给类型“AxiosRequestConfig”的参数。属性headers'的类型不兼容。 类型“(config:AxiosRequestConfig)=>AxiosRequestConfig'的参数不能赋给类型“(value:
若依框架 axios 若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios封装若依axios
目录1. Axios 概念2. Axios 封装 1. Axios 概念 在开发中广泛使用的Axios调用接口,Axios 是一个基于 Promise 的 HTTP 库,可以在浏览器和 node.js 中使用。Axios 具备以下特性: 从浏览器中创建 XMLHttpRequests; 从 node.js 创建 HTTP 请求; 支持 Promise API; 拦截请求和响应; 转换请求数据和响应数据; 取消请求; 自动转换 JSON 数据; 客户端支持防御 XSRF。 其实可以理解为 Axios 就是
封装axios的post请求时,可以通过开放config参数来实现灵活性和定制化。在引用中的代码中,可以看到在Post方法中有一个config参数,它可以用来传递定制化的配置。当我们调用Post方法时,可以传入一个包含配置信息的config对象,例如baseURL、headers等。这样就可以根据不同的需求来定制请求的配置参数了。而如果不传入config参数,请求会使用默认的配置。在引用的解释中,提到了开放config参数后的优点和问题,包括请求的灵活性和默认值的处理方式等。在引用中的代码中,我们可以看到在Axios类的构造函数中,通过将传入的instanceConfig赋值给this.defaults来实现默认配置的设置。同时,在request方法中,使用mergeConfig方法将传入的config与默认配置进行合并,以便得到最终的请求配置。通过这些操作,我们可以实现对axios post请求的封装,并根据需要进行定制化配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [axios封装时对config参数的一点思考](https://blog.csdn.net/qq_45020818/article/details/131006517)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
axios的最新封装,解决类型AxiosRequestConfig不能赋值给InternalAxiosReqe;CreateAxiosDefaults不能赋值给AxiosRequestConfig Vue3报错:Failed to resolve component: Refresh If this is a native custom element, make sure to exclude vuex使用$store出现类型“{ $: ComponentInternalInstance; $data: {}; $props: { style?: unknow不存在属性“$store“问题。 解决ts无法找到模块“element-plus/dist/locale/en.mjs“和无法找到模块“element-plus/dist/locale/zh-cn.mjs“。.d.ts文件无效问题 Vue3报错:Failed to resolve component: Refresh If this is a native custom element, make sure to exclude CSDN-Ada助手: 恭喜你写了第9篇博客!看到你对Vue3报错的解决方案分享,真是受益匪浅。希望你能继续保持创作的热情,分享更多关于Vue3的经验和技巧。或许可以考虑写一些关于Vue3常见错误的排查和解决方法,这样能够帮助更多的开发者。加油! axios的最新封装,解决类型AxiosRequestConfig不能赋值给InternalAxiosReqe;CreateAxiosDefaults不能赋值给AxiosRequestConfig IIIyezi: AxiosRequestConfig是InternalAxiosRequestConfig的父类,直接继承InternalAxiosRequestConfig就好 axios的最新封装,解决类型AxiosRequestConfig不能赋值给InternalAxiosReqe;CreateAxiosDefaults不能赋值给AxiosRequestConfig 楼主,如果在request方法里面定义拦截器,typescript类型该如何定义呀?InternalAxiosRequestConfig和AxiosRequestConfig会有冲突 数据可视化Echarts CSDN-Ada助手: 恭喜您写下了第11篇博客!标题为“数据可视化Echarts”的文章内容看起来非常有趣。您对数据可视化这一话题的深入研究,让我对Echarts有了更多的了解。不仅如此,您还以谦虚的态度分享了自己的见解,这让我非常钦佩。接下来,我希望您能继续保持这种创作的热情,不断探索更多关于数据可视化的内容。或许您可以探讨一下如何在实际项目中应用Echarts,或者分享一些Echarts的高级技巧。相信这些主题会给读者带来更多的启发和帮助。再次恭喜您,并期待您的下一篇博客! Vue3项目中,jsx配置不生效问题 IIIyezi: 解决ts无法找到模块“element-plus/dist/locale/en.mjs“和无法找到模块“element-plus/dist/locale/zh-cn.mjs“。.d.ts文件无效问题 Vue3报错:Failed to resolve component: Refresh If this is a native custom element, make sure to exclude