基于TypeScript从零重构axios

  [复制链接]
查看4635 | 回复12 | 2019-8-14 22:25:04 | 显示全部楼层 |阅读模式

3 u- f; S/ L1 R% S/ n4 W 360截图167708098610583.png   \5 m$ A! h( O) G! z+ e  ?
〖课程介绍〗
4 ?3 @1 U- u' b1 K4 c- R3 m        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
5 f  Y# ]) r2 y( r- V$ x* }/ p: \3 i, y4 x" E' \$ r8 I1 k3 o) S$ \6 }& x4 U& j6 G& n
〖课程目录〗; _' w* T. x% \) k' @0 k! q: {% p, l5 L4 m
第1章 课程介绍【悄悄告诉你,一定要看,有福利】: M% J+ P, `( i9 y
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。
, u8 G" R4 M1 E1-1 课程介绍 试看, v0 c+ Y; Q: x8 s6 ]1 U
* E: ^0 |  |! q& L: O
第2章 初识 Typescript【初次体验】0 D2 h/ i4 q7 Z2 `1 e% F
教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。
  K3 g% `0 S& @2 z( u6 S4 W2-1 安装 TypeScript: F) ?$ [5 x: G% H: F# i: |& u- S
2-2 编写第一个 TypeScript 程序 试看! l& D/ j% g; F/ k& N/ {

% m% [1 O" @: v+ Q0 w4 a# k第3章 Typescript 类型系统【必备基础,牢固掌握】0 \  ]+ u6 H! a
参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。
% N. V% s/ H$ x3 p3-1 基础类型(上)2 Z9 y6 b6 @5 }- ^
3-2 基础类型(下)5 u& `3 U9 l+ a/ O9 z. ]+ e" U
3-3 基础类型(注意版本报错问题)
- G& \: C2 R0 m' X3-4 变量声明 - var 声明7 z7 ]. P# @& E
3-5 变量声明 - let 声明' ^% J5 r% C9 e. p# o& C' s
3-6 变量声明 - const 声明# k1 `* E& N2 @8 S( V$ {; W
3-7 变量声明 - 解构
# x: Q! b: E0 ?  B: d3 _0 a& \6 S% q3-8 变量声明 - 展开" ]$ f; P1 G& H  {: `
3-9 接口 - 接口初探9 k# R2 o$ e) w0 I# s  r
3-10 接口 - 可选属性+只读属性
( z$ B: M9 I1 K. \& z/ V3-11 接口 - 额外属性检查+函数类型+可索引的类型
+ S, Y) c* r4 Q% H3-12 接口 -类类型+继承接口+混合类型+接口继承类( C9 U9 O$ K' l4 Q; x
3-13 类 - 基本示例+继承! w2 s) J* B  B# `$ c% t  \
3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符) T! U: R. J2 ^
3-15 类 - 存取器+ 静态属性# P2 F( l1 ?% m5 A, |# ]/ _- [
3-16 类 - 抽象类+ 高级技巧' U& P4 Y* n6 }  N4 [
3-17 函数 - 基本示例+ 函数类型' V* s: g9 h6 h2 [, D0 W
3-18 函数 - 可选参数和默认参数: m3 {% g0 `3 z  t& @
3-19 函数 - this+ 重载- `- J8 Q; |1 r3 w- w% B) |) N
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型5 G2 r) L0 E4 o
3-21 泛型 - 泛型类+泛型约束
" q, c, D2 I: E+ q3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型/ q% N( {2 K' k3 T8 r
3-23 高级类型 - 交叉类型) f9 j) X1 O1 G* S, r
3-24 高级类型 - 联合类型
" ?% \3 ]8 p2 y) A/ r3-25 高级类型 - 类型保护8 c9 h* T5 k+ v
3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型$ s; v! `- N1 _; d  A
& H9 T# M7 G5 |& \( v8 R+ S
第4章 ts-axios 项目构建【工欲善其事必先利其器】
$ g# `/ b  u: a. P( }, I$ A; e3 a分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。8 f8 }" E+ Q' J- x9 D* ?
4-1 需求分析; i: j) Y+ L) i% }
4-2 初始化项目 - 创建代码仓库$ W- A' Y  Y7 l% b2 e
4-3 初始化项目 - TypeScript library starter
+ h+ z+ ^9 [6 f: N: w- X; }, Y4-4 初始化项目 - 关联远程分支0 M4 H4 p$ r/ C* F: `
4-5 编写基础请求代码 - 创建入口文件
  K% f; b/ j) Z2 D  X/ G, m; g  z4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求6 j9 B/ ^' Y, W# ], z( R9 r# E
4-7 编写基础请求代码 - demo 编写. O4 i+ a) H3 M+ [

0 N( h4 \& c9 _: J" E; V第5章 ts-axios 基础功能实现【核心流程】) D* ]% a- e; r
实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。! C' L5 n. T; C
5-1 处理请求 url 参数 - 需求分析4 o6 v3 H. W- i! s. `) M) @4 X/ r5 ~
5-2 处理请求 url 参数 - buildURL 函数实现
; s, B  t& m! d+ ]- T1 w) j- P# @5-3 处理请求 url 参数 - 实现 url 参数处理逻辑
7 ?. e" I$ p1 I& C5-4 处理请求 url 参数 - demo 编写- F' E& w3 ~8 S* B
5-5 处理请求 body 数据 - 需求分析+ 实现 试看, s6 g, B8 b3 P3 ~6 y
5-6 处理请求 header - 需求分析& F9 x# P3 r% v: F7 @. S. D. s
5-7 处理请求 header - processHeaders 函数实现
3 v+ k. ]5 p' C) g4 p4 }" k3 n5-8 处理请求 header - 实现请求 header 处理逻辑
; d5 Q/ [. X1 Z' i7 g0 c5-9 处理请求 header - demo 编写# _3 T3 A) D/ E! S, d
5-10 获取响应数据 - 需求分析+实现
* _, z0 v* `/ F; m  A7 [5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用" ~- w% `# W  c  n+ n- h& h
5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用
  P( v& E' v- ^4 z  S+ A. ~: W4 B1 \, o4 I% ~3 s
第6章 ts-axios 异常情况处理【不可忽视的边界条件】7 }6 `, J$ @2 E! s! P
处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。
) l0 C" j( h; g! ~" F9 k. e1 e6-1 错误处理 - 需求分析5 h" k5 j5 H0 V6 F) {! Z( \1 W' }
6-2 错误处理- 网络错误+超时错误+非200状态码+demo. {) i" O0 x: Q5 T
6-3 错误信息增强 - 需求分析
/ Y. O7 q: r9 X" y% i2 S  O6-4 错误信息增强 - 创建 AxiosError 类
9 i0 ?4 V8 h" @- Q7 P) b8 j4 [6-5 错误信息增强 - createError 方法应用+ 导出类型定义
4 @2 v. g7 @2 q6 q+ ^3 }) c; |# @- \0 ]$ @8 w. t! A
第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】2 R. W* U7 p5 z- i
把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。% ~) b  o) T  U' ~3 k) W8 p. _
7-1 -1 扩展接口 - 需求分析# x8 V8 B) ~3 c6 M# Y
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类
. S- _5 L& [; L  _0 G- j3 d7-3 -3 扩展接口 - 混合对象实现+ demo 编写
9 m+ P1 l& i8 _* y1 m2 T& o7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写* X0 i  M/ W. r+ y
7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写
5 g" C+ f  ^" b7 h5 j
& ]7 H0 A0 a) L第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】
8 x% e) V2 ?' E实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。
, \7 T# i6 v; z, B3 ?4 Z0 ]7 @8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计
0 ?1 f4 h: X1 m. \+ c/ ]3 s8-2 -2 拦截器的设计与实现 - 拦截器管理类实现
+ d, S0 Q8 \+ V* c# M8-3 -3 拦截器的设计与实现 - 链式调用实现
( _& a2 L/ T+ L8-4 -4 拦截器的设计与实现 - demo 编写
& J1 V2 s0 j" r7 L2 k! q/ I1 g- T% C7 Z0 ~# A! M
第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】5 M0 e2 {) H$ r, l
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。
6 l; f5 ^' `0 i3 N/ _4 }3 S& X1 U' W9-1 合并配置的设计与实现 - 需求分析 + 默认配置* S+ z0 M7 E) |; Z* Q( {) T
9-2 合并配置的设计与实现 - 配置合并策略(上)1 K+ o1 k/ n) Y+ y) [
9-3 合并配置的设计与实现 - 配置合并策略(下)5 v( d# E8 x3 {$ ?2 f
9-4 合并配置的设计与实现 - flatten headers + demo 编写
1 Y5 `" _9 Z1 u% ^9-5 请求和响应配置化- 需求分析+ 修改默认配置: b. p5 \/ e4 l. A9 F
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写
" F, Z" O( ]8 N9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现
4 }; f% F9 l1 W, Z! k- \/ H
. v0 B  s" F7 y9 z) _) i第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】
) C* ]) Y1 {4 g2 c实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
2 D! B  ]0 r1 T  \5 e$ C10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案7 }* ^6 b  D. Q4 D* F/ V. N' Q
10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口7 k2 e7 S2 k' y* z/ V
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现
+ t5 i; u: V  H8 J& u5 \) n10-4 -4 取消功能的设计和实现 - demo 编写; @; g2 I& r! j7 f
0 I  x3 v! a; I. q1 A3 T1 n
第11章 ts-axios 更多功能实现【锦上添花】7 T( |) p1 E$ }! Y0 j
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
' G8 s$ o5 a' P6 u: S; \$ e( A2 x# H11-1 withCredentials 需求分析&代码实现& demo 编写2 {3 _2 \* [% X+ p
11-2 xsrf 防御 - 需求分析( U) J1 i6 \5 J5 K( T, d
11-3 xsrf 防御 - 代码编写
3 m5 J7 f5 x1 x; l0 s11-4 xsrf 防御 - demo 编写
* G/ j; D! a8 x1 Y" [11-5 上传和下载的进度监控 需求分析+ 代码实现  R$ l3 j, T# V$ q- g: \" B
11-6 上传和下载的进度监控 demo 编写
7 J% X3 h( ^! Q8 P/ H11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写
7 Z8 L# ^9 T" C: Y/ h11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
" F3 {$ h0 l0 F$ V/ J1 r/ Y* R11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写" o: F7 s( s2 G3 ~8 ^
11-10 baseURL 需求分析+ 代码编写 + demo编写
! J( ]; h% d$ B+ J; I) C% E' y11-11 静态方法扩展 需求分析+ 代码编写 + demo编写+ n7 p2 K! L2 f% W1 \% W# B
" l4 `+ R" \7 D9 s
第12章 ts-axios 单元测试【保障代码高质量】
: p6 _1 ?3 j  f- @: h先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%: w0 A9 T  g* u. I9 k  Y- R
12-1 前言
& r7 |5 d' s+ A, e- H' D2 x12-2 Jest 的安装和配置 Jest 安装
7 R# T! Q, v4 y! Z12-3 辅助模块单元测试 准备工作
2 k* [7 U7 q0 ?8 q$ G7 P12-4 辅助模块单元测试 util 模块测试-1 c+ c4 i7 Z6 Z# |; m
12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试$ G) Y% o$ ?, m! k$ u: i0 _
12-6 辅助模块单元测试 headers 模块测试) K. S* l# f6 {* |+ V
12-7 辅助模块单元测试 url 模块测试
: y8 L' Q+ u) ~2 Z! Y12-8 请求模块单元测试 jasmine-ajax + 测试代码编写
0 f7 X* C4 o3 R9 W12-9 header 模块单元测试 测试代码编写2 S( z# E' |+ F5 |; E" j
12-10 Axios 实例模块单元测试 测试代码编写
6 I* E" Y8 d: |% T7 d+ E12-11 拦截器模块单元测试 测试代码编写) ^( K6 @/ f1 E% D5 h* n* r
12-12 mergeConfig 模块单元测试 测试代码编写' t5 K& [) G# X( ^
12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试
/ }+ \! K- J' S/ ?8 c12-14 剩余模块单元测试 defaults 模块单元测试  E' v2 s* I; b2 ^8 g, I
12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试4 n, u( ?+ F  ^& [0 z3 q
12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试
( m+ [* b6 D  @% ]1 |12-17 剩余模块单元测试 补充未覆盖的代码测试$ Y+ x2 |& |( h+ H& i/ V

2 U9 b! |/ I! j# H% H第13章 ts-axios 部署发布【向社区分享你的项目】( K! d' t; `  Q  C( E8 ]
讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。  D# T* J9 p2 i+ B, H0 L
13-1 ts-axios 编译与发布 需求分析 + 编译和打包0 u8 C2 G7 O. K( D( f) d6 z
13-2 ts-axios 编译与发布 自动化部署
( G  L. {5 d" B0 l13-3 ts-axios 编译与发布 运行部署脚本8 M- m! l3 ^6 I7 x; I, f% f
13-4 ts-axios 库 在 TS 和 JS 项目中引用
0 _5 _* c  o( M/ c5 ^' Y2 v- U
第14章 课程总结【知识梳理,巩固加深】) `% I4 c! E; X. a, x$ w
本次课程的整体回顾,总结学习的内容。, v+ ?! T$ {# D' I- R" r& v! P" Z
14-1 课程总结 与回顾
( ~' L7 }- A: n4 w9 l1 R
/ U9 C1 t! J' v- z
: n1 ^, ?8 Q1 b) Q% Q4 f7 W〖下载地址〗
' \0 q% ]6 i7 G: N* U( j! X/ w( {1 E
游客,如果您要查看本帖隐藏内容请回复

: x9 i9 N6 U' ?- `3 v1 D+ v* W

' t) z7 G) n% j8 c" {% X- X
回复

使用道具 举报

sunjun1051 | 2019-9-9 14:29:28 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

jaywin | 2019-9-11 21:52:12 | 显示全部楼层
看到这帖子真是高兴!
回复

使用道具 举报

都是你的错 | 2019-10-13 16:58:30 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

Before80 | 2019-11-26 21:05:35 | 显示全部楼层
hello php , hello world !
回复

使用道具 举报

shifangming | 2020-6-28 16:37:30 | 显示全部楼层
基于TypeScript从零重构axios
回复

使用道具 举报

RayCssjmt | 2020-8-11 16:10:58 | 显示全部楼层
正想axios ts顺便也可以学学真棒
回复

使用道具 举报

wwj | 2021-6-1 19:50:57 | 显示全部楼层
学习学习
回复

使用道具 举报

qwety20185 | 2021-9-5 09:07:56 | 显示全部楼层
: E+ I2 X8 L0 }0 @6 i5 Z/ }
正想axios ts顺便也可以学学真棒
回复

使用道具 举报

春游的夏天 | 2022-3-25 09:49:34 | 显示全部楼层
在 TS 和 JS 项目中引用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则