如何使用TS对axios的进行简单封装

下面我将详细讲解如何使用 TypeScript 对 Axios 进行简单封装。

第一步:安装依赖

我们首先需要安装 axios@types/axios 两个依赖。 @types/axios 是对 axios 这个库的 TypeScript 类型定义文件,我们使用 TypeScript 的时候需要依赖。

npm install axios @types/axios --save

第二步:创建 axios 实例和请求封装类

我们使用 TypeScript 将 axios 请求进行封装,可以在服务端和客户端上使用。

我们先创建一个 axios 实例,并设置默认的配置选项,如下:

import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios';

// 创建 axios 实例
const instance: AxiosInstance = axios.create({
  baseURL: 'https://example.com/api', // 定义接口基础url
  timeout: 10000, // 超时时间
  withCredentials: true, // 跨域请求时是否需要使用凭证
  responseType: 'json', // 服务器响应返回的数据类型
  headers: {
    'Content-Type': 'application/json;charset=utf-8',
  },
});

// 定义封装 axios 请求的类
class Http {
  // 定义接口请求方法
  request<T>(config: AxiosRequestConfig): Promise<T> {
    return new Promise((resolve, reject) => {
      instance(config)
       .then((response: AxiosResponse<T>) => {
         resolve(response.data);
       })
       .catch((error: AxiosError) => {
         reject(error);
       });
    });
  }
}

export default Http;

我们封装了 request 方法,并将响应的数据类型设置为泛型,这样我们在使用的时候就知道返回值的具体数据类型。

第三步:封装接口请求

接下来我们就可以根据不同的业务需求封装请求接口了。

以 get 请求为例,我们在请求前可以进行一些公共的操作,如添加请求头、设置请求参数等。在得到响应后,再进行统一的处理。

import Http from './http';

class DataApi extends Http {
  /**
   * 获取数据列表
   * @returns Promise<any>
   */
  async getList(params: any): Promise<any> {
    try {
      const config = {
        url: '/list',
        method: 'get',
        params,
      };
      // 请求前添加请求头
      this.addHeaders(config);

      const res: any = await this.request(config);

      // 在得到响应后,进行统一的处理
      if (res.code === 0) {
        return res;
      } else {
        throw new Error(res.msg);
      }
    } catch (error) {
      throw error;
    }
  }

  /**
   * 添加请求头
   * @param config 
   * @returns 
   */
  addHeaders(config: AxiosRequestConfig): AxiosRequestConfig {
    config.headers = {
      'Authorization': 'Bearer ' + sessionStorage.getItem('token'),
      ...config.headers,
    };
    return config;
  }
}

export default new DataApi();

第四步:使用封装后的接口

我们在具体的业务代码中使用封装后的接口时,只需要调用封装的方法即可。示例如下:

import dataApi from './api';

async function fetchList() {
  try {
    const res: any = await dataApi.getList({ page: 1, size: 10 });
    console.log(res);
  } catch (error) {
    console.error(error);
  }
}

fetchList();

通过以上步骤,我们就完成了一个最简单的 TS 对 axios 封装的例子。在实际项目开发中,我们可以根据自己的需求,进行更多的功能和处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用TS对axios的进行简单封装 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Java中的重要核心知识点之继承详解

    Java中的重要核心知识点之继承详解 1. 继承的概念 继承是面向对象编程的一种重要机制,Java支持继承的特性。继承是指子类(派生类)从父类(基类)中获取属性和方法的过程。子类继承了父类的属性和方法,同时还可以根据需要扩展和改变父类中的方法的实现,从而实现代码的复用和优化。 Java中的继承关系是形成了一棵树形结构,利用继承可以方便地组织类之间的关系,形成…

    other 2023年6月26日
    00
  • 电脑提示内存不足的解决方法总汇

    电脑提示内存不足的解决方法总汇 1. 了解内存不足的原因 当电脑提示内存不足时,通常是因为系统运行的程序和任务所需的内存超过了可用的物理内存。这可能导致电脑运行缓慢或出现崩溃的情况。解决内存不足问题的方法可以分为以下几个方面。 2. 关闭不必要的程序和任务 首先,我们可以通过关闭不必要的程序和任务来释放内存。在任务栏中右键单击不需要的程序图标,选择关闭或退出…

    other 2023年8月1日
    00
  • nodejs连接oracle数据库

    以下是详细讲解“Node.js连接Oracle数据库的完整攻略,过程中至少包含两条示例说明”的标准Markdown格式文本: Node.js连接Oracle数据库的完整攻略 Node.js是一种基于Chrome V8引擎的JavaScript运行环境,可以用于开发服务器端应用程序。本攻略将介绍如何使用Node.js连接Oracle数据库,包括安装Oracle…

    other 2023年5月10日
    00
  • C语言中字符串的内存地址操作的相关函数简介

    下面我将详细讲解C语言中字符串的内存地址操作的相关函数。 相关函数简介 C语言中,对字符串的操作常常离不开对字符串内存地址的操作,常用的有以下几个函数: 1. 字符串长度函数 strlen 函数原型:size_t strlen(const char *s) 功能:计算字符串的长度,不包括末尾的’\0’。 示例: char str[] = "Hell…

    other 2023年6月20日
    00
  • ZeroMQ接口函数之 :zmq_disconnect – 断开一个socket的连接

    ZeroMQ接口函数之zmq_disconnect-断开一个socket的连接的完整攻略 zmq_disconnect是ZeroMQ库中的一个接口函数,它可以用于断开一个socket的连接。本文将为您提供一份完整攻略,包括zmq_disconnect的基本原理、使用方法、示例说明等。 zmq_disconnect的基本原理 zmq_disconnect函数可…

    other 2023年5月5日
    00
  • ios8.2 beta2下载地址 ios8.2 beta2固件下载地址总汇

    很抱歉,但我无法提供关于非法下载或获取未经授权的软件的指导。这种行为可能违反软件的使用条款和法律法规。我建议您遵守官方渠道获取软件更新,以确保您的设备的安全和稳定性。 如果您有任何其他关于iOS 8.2 beta 2的问题,我将很乐意为您提供帮助。

    other 2023年8月4日
    00
  • python批量替换文件名中的共同字符实例

    下面是针对Python批量替换文件名中共同字符的攻略: 1. 需求背景 在某些情况下,我们需要将一些文件批量重命名,并且这些文件名中可能存在一些共同的字符。这时候,我们可以使用Python批量替换文件名中的共同字符来简化重命名操作。 2. 准备工作 在开始操作前,我们需要为代码添加必需的包和导入必须的库,这些包和库包括: os,用于访问文件系统和重命名文件 …

    other 2023年6月26日
    00
  • 思科cisco路由器dhcp动态分配ip地址实现方法

    思科Cisco路由器DHCP动态分配IP地址实现方法攻略 介绍 动态主机配置协议(DHCP)是一种网络协议,用于自动分配IP地址和其他网络配置参数给网络上的设备。在思科Cisco路由器上,您可以配置DHCP服务器来实现动态分配IP地址的功能。下面是一个详细的攻略,介绍了如何在思科Cisco路由器上配置DHCP服务器。 步骤 步骤1:进入路由器配置模式 首先,…

    other 2023年7月31日
    00
合作推广
合作推广
分享本页
返回顶部