TypeScript 的 HTTP 客户端:Web 开发顶级库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

TypeScript 的 HTTP 客户端:网络交互顶级库



在现代 TypeScript Web 开发中,选择合适的 HTTP 客户端对于性能、类型安全和代码可维护性至关重要。让我们来看看执行 HTTP 请求的最佳库、它们的特点以及使用示例。



1. Axios — 通用标准

Axios 凭借其丰富的 API 和对 TypeScript 的内置支持,仍然是最流行的 HTTP 客户端。该库为 GET、POST、PUT、DELETE 请求提供了便捷的方法,自动 JSON 转换和请求取消功能。



import axios from 'axios';

interface User { id: number; name: string; email: string;}

async function getUser(id: number): Promise<User> { const response = await axios.get<User>(`/api/users/${id}`); return response.data;}

// 发送数据示例const newUser: Partial<User> = { name: '伊万', email: 'ivan@example.com' };axios.post('/api/users', newUser).then(({ data }) => console.log(data));


优势:

  • 与 TypeScript 深度集成(响应的泛型)
  • 用于日志记录和错误处理的拦截器
  • 内置 XSS 防护和自动序列化
  • 支持文件上传进度


2. Ky — 轻量且现代

Ky 是一个极简库(仅约 5KB),构建于 Fetch API 之上。非常适合注重加载速度和简单性的项目。完全使用 TypeScript 进行类型化。



import ky from 'ky';

interface Post { userId: number; id: number; title: string;}

const posts = await ky.get('https://jsonplaceholder.typicode.com/posts').json<Post[]>();

// 使用自定义标头发送const response = await ky.post('https://api.example.com/data', { json: { key: 'value' }, headers: { 'X-API-Key': 'secret' },});


关键特性:

  • 自动处理 HTTP 错误(4xx/5xx 状态码)
  • 内置重试支持(失败时自动重试)
  • 通过扩展类轻松自定义
  • 可在浏览器和 Node.js 中运行(通过适配器)


3. Got — 强大的 Node.js 工具

Got 是一个功能齐全的 HTTP 客户端,适用于 TypeScript 服务器端。支持流、缓存、代理和复杂的身份验证场景。



import got from 'got';

interface ApiResponse { success: boolean; data: Record<string, unknown>;}

const result = await got.get('https://api.example.com/resource', { responseType: 'json', headers: { authorization: `Bearer ${process.env.TOKEN}` }}).json<ApiResponse>();

// 带进度条的文件下载got.stream('https://example.com/file.zip') .on('downloadProgress', ({ percent }) => { console.log(`已下载 ${(percent * 100).toFixed(0)}%`); }) .pipe(fs.createWriteStream('./file.zip'));


何时选择 Got:

  • 用于高负载的服务器端应用程序
  • 需要处理数据流时
  • 用于复杂的缓存和重试场景
  • 通过装饰器与 TypeScript 集成


4. Fetch API — 原生选择

现代 Fetch API 内置于浏览器和 Node.js(从 18 版本开始)。TypeScript 通过泛型添加类型化,使其成为一个完整的工具。



interface Config {  baseURL: string;  token?: string;}

async function fetchData<T>(endpoint: string, config: Config): Promise<T> { const response = await fetch(`${config.baseURL}${endpoint}`, { headers: { 'Content-Type': 'application/json', ...(config.token && { Authorization: `Bearer ${config.token}` })

推荐