基于TypeScript从零重构axios

  [复制链接]
查看4861 | 回复12 | 2019-8-14 22:25:04 | 显示全部楼层 |阅读模式
  m) n: P$ J1 f' p% y
360截图167708098610583.png % {8 f# J# g$ F- f; {# c1 n' D
〖课程介绍〗
) B$ f( [0 e$ z# Y7 S        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
, k2 B  `; @1 [- b& _  {, y4 x" E' \$ r8 I1 k3 o
$ \% }) B6 n7 o2 {+ ?〖课程目录〗
! i( V- A$ E* K/ S第1章 课程介绍【悄悄告诉你,一定要看,有福利】
" }# |9 E' v1 O; {( h' y8 F) C6 _介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。0 ~4 c; \7 K$ j& G1 c/ D
1-1 课程介绍 试看
" U* n, z& c% R3 L$ |& V
% S" \( t& n5 P第2章 初识 Typescript【初次体验】
* t& n0 X' j  E6 o  c% t4 N教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。
" a; l% [& @- B3 b4 D" {# ~2-1 安装 TypeScript9 S8 w& O/ t( B: r$ T1 N
2-2 编写第一个 TypeScript 程序 试看
3 n) ~. ^" {' P& B" u% }- J
! h# ^) z. O( V4 I) h0 X2 Y第3章 Typescript 类型系统【必备基础,牢固掌握】
* B' e5 {/ ~& g2 d7 N! T1 ~1 w  i参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。
' u- O: l- z" \. y9 q( C& t3-1 基础类型(上)+ @0 G9 Y+ q, P6 g5 j/ O
3-2 基础类型(下)  T5 H7 v& o  N* h  l3 j
3-3 基础类型(注意版本报错问题)3 r& A& w8 X+ V& @6 \
3-4 变量声明 - var 声明
/ M* }4 Y4 o- m- b! m3-5 变量声明 - let 声明2 D! h& Z8 J& {$ [5 ]2 O/ f8 X2 ~
3-6 变量声明 - const 声明
4 ?) k& c. H2 O$ a1 O* N3-7 变量声明 - 解构- w# Y! g) G+ |
3-8 变量声明 - 展开: [3 B( {( Q! P% ^2 K& e
3-9 接口 - 接口初探, W. U/ g/ G7 r+ M8 I4 s
3-10 接口 - 可选属性+只读属性
+ }0 v! v# }4 C* y$ v3-11 接口 - 额外属性检查+函数类型+可索引的类型" M; ?$ g( U6 V2 q! s  ]$ s
3-12 接口 -类类型+继承接口+混合类型+接口继承类8 N6 X6 r7 a2 l
3-13 类 - 基本示例+继承* ^; X+ b5 ~+ B* f/ X
3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符
9 [: i/ f" G6 j9 s) Y3-15 类 - 存取器+ 静态属性
; o7 \) y" E+ q3-16 类 - 抽象类+ 高级技巧  {0 s: i, f0 Z" O* o# y
3-17 函数 - 基本示例+ 函数类型
1 q/ }, G. e6 p* n5 d0 j/ l3-18 函数 - 可选参数和默认参数/ ^& ~2 ?9 N9 {4 R6 I9 R
3-19 函数 - this+ 重载
, s( L4 @: t: P2 Z( R3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
6 S( G  ^  {* Q+ H6 d" `3-21 泛型 - 泛型类+泛型约束' c* o: i' I) i, l, s9 E0 m9 ]
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型
  c( u# ?- Y$ B+ c, T: }* ]9 ~1 \3-23 高级类型 - 交叉类型
2 N6 f  n) q5 ^# y3-24 高级类型 - 联合类型
, p& W; }  h* W2 }3-25 高级类型 - 类型保护
2 H) [* G, g! B% k$ e2 g3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型
* p5 D  Q+ _$ [: Y
# C* l7 i/ q+ ?4 m. x$ O* z第4章 ts-axios 项目构建【工欲善其事必先利其器】
" g% t% T* r' o) }* E. f6 p" V5 m分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。
0 H" X- ?8 @+ o5 I: T1 z8 s4-1 需求分析: J+ p. P7 l  X$ J4 d! G
4-2 初始化项目 - 创建代码仓库
- b2 R5 g0 K# E; L' f  T) r4-3 初始化项目 - TypeScript library starter6 A0 c& Q: t" i) o% y. n  z& G
4-4 初始化项目 - 关联远程分支) K1 ~) B( d7 r
4-5 编写基础请求代码 - 创建入口文件
/ [% |* ?. J3 F4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求5 e) f9 m' \1 n9 o" m* v
4-7 编写基础请求代码 - demo 编写
! U# d( g3 `+ y2 \, O3 L8 U! `" S5 F! i7 {0 p: [- I* P
第5章 ts-axios 基础功能实现【核心流程】: t: a! _- ?7 M( i1 f) e" S
实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。8 }, q5 W6 g5 B( _- h
5-1 处理请求 url 参数 - 需求分析, p$ w% x; h* z+ w" L
5-2 处理请求 url 参数 - buildURL 函数实现- ]% [# n$ L% g! k) ]" v7 C; L9 e* o
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑1 q; N' `  k. r: L# W) T$ ^
5-4 处理请求 url 参数 - demo 编写) `: [0 A. @6 f4 I
5-5 处理请求 body 数据 - 需求分析+ 实现 试看/ D/ Z5 I+ D; r6 l: B5 H; n
5-6 处理请求 header - 需求分析
8 ]3 r2 N$ t' V) W, P5-7 处理请求 header - processHeaders 函数实现
. R" y8 B; m0 N2 X! _5-8 处理请求 header - 实现请求 header 处理逻辑4 Q' K$ s1 n( Y
5-9 处理请求 header - demo 编写
. h1 }$ g. i& M" K. D$ b# ]5-10 获取响应数据 - 需求分析+实现
! R. L( O# P/ Q* l- ]; H5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用
) \! w# u4 W6 J3 \# c5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用
6 h  M; m: l2 {3 i. `% N( U# N1 J, P, u
第6章 ts-axios 异常情况处理【不可忽视的边界条件】
, v. v- Y! M. ?# R/ \( y/ K9 J处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。( [, F8 |0 x7 z4 q3 C) `: p# U5 ~
6-1 错误处理 - 需求分析* P- @- |6 o% a! I  O  Z
6-2 错误处理- 网络错误+超时错误+非200状态码+demo
3 J# T( O: @, G, a  |7 y  w1 R6 ^  a+ X6-3 错误信息增强 - 需求分析6 |6 }5 V; _; L, n9 f  j2 s
6-4 错误信息增强 - 创建 AxiosError 类
  u* ~4 R5 d* L: J+ L4 k$ `& F6-5 错误信息增强 - createError 方法应用+ 导出类型定义+ s( P2 W5 Y% ]* m& ]  V( @& R) s

6 w4 q' v% B) x3 n& B第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】
9 C( Z0 H& I- O( D把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。
/ ~- ?8 u( z* F3 d- x3 h7-1 -1 扩展接口 - 需求分析; o2 {% j8 B$ e/ V% y. q
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类; i. h. ~; ^% q% ^3 z% Y0 v7 B
7-3 -3 扩展接口 - 混合对象实现+ demo 编写
0 T: p9 k; J* j, A$ S7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写# V( R% X0 t5 E
7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写
( l( T& W8 |2 k+ f" ^& }' O' @; u, c; P- z  m2 E
第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】
6 [( \1 o7 Y, u6 ?0 \实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。8 \1 M  t1 E" B* X
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计
% V2 u1 Q. z, @0 L8 [# H7 S8-2 -2 拦截器的设计与实现 - 拦截器管理类实现
6 I9 L6 [; F% U) k# F6 A8-3 -3 拦截器的设计与实现 - 链式调用实现* y4 b) E5 n2 y% c2 N8 M2 u/ @
8-4 -4 拦截器的设计与实现 - demo 编写
. l+ T* o2 ~# f" W
; {0 Q2 p+ }/ g( a; \第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】
. }3 q1 Y" |. t+ b让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。0 j% m/ _/ k; W: S
9-1 合并配置的设计与实现 - 需求分析 + 默认配置& W- M- r6 w' R* J4 U( j
9-2 合并配置的设计与实现 - 配置合并策略(上)4 y5 q9 l, X  e7 @2 T9 J& ^( t
9-3 合并配置的设计与实现 - 配置合并策略(下)! |! w8 }2 ]/ c$ h8 G) Q8 ]7 s
9-4 合并配置的设计与实现 - flatten headers + demo 编写
8 M0 z" o3 H0 L: s6 m  h) X/ o9 \9-5 请求和响应配置化- 需求分析+ 修改默认配置
) q: n; e9 h) i5 L; A" D+ x9-6 请求和响应配置化- transform 逻辑重构 + demo 编写
  D4 B* U% E/ q0 O" i6 }9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现5 b$ j8 L( R7 I
! @, O8 ?3 ?) z$ w# h8 u  }
第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】: l  J3 N5 d9 w& o
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
3 V7 x$ l, \" {& h0 W8 _8 i10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案, M. o; X) G2 S, `  v2 s
10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口6 X8 d* b$ O# h/ ?
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现
  N; d7 h. m; q! w9 ?10-4 -4 取消功能的设计和实现 - demo 编写
: c6 n% c2 B" y+ m; _3 x/ h3 n0 L( g2 T
第11章 ts-axios 更多功能实现【锦上添花】) N, L6 e$ h* X5 {  _/ |) ~$ H* V
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。- P% W2 d, D$ ?; b' a& t# K: n
11-1 withCredentials 需求分析&代码实现& demo 编写
; [: Q9 ?* Y+ _) ?11-2 xsrf 防御 - 需求分析
5 ?$ a$ b3 r1 o! D11-3 xsrf 防御 - 代码编写
3 r2 \) V; Y) |1 m' T11-4 xsrf 防御 - demo 编写
6 c* A. C$ o2 p1 E1 c11-5 上传和下载的进度监控 需求分析+ 代码实现
; a4 D* f4 O  d11-6 上传和下载的进度监控 demo 编写& M6 h! ~2 A. x8 d
11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写( d4 G8 j) Z6 P5 r2 T: b
11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
5 d9 |5 p. q( E5 H' d8 l- T9 U11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写; P% B9 B  w" ~0 c8 S. P# ~+ A
11-10 baseURL 需求分析+ 代码编写 + demo编写, z' g1 Q( A& j8 `  J5 t
11-11 静态方法扩展 需求分析+ 代码编写 + demo编写
  u% }% ^! b( O5 ~( ]% T9 T% Z3 ]3 Y3 ~$ @8 z
第12章 ts-axios 单元测试【保障代码高质量】
+ Z* ]& X, e# H5 i! [8 n2 R先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%( l5 V' H8 X5 ^
12-1 前言4 `. u! P& N/ L
12-2 Jest 的安装和配置 Jest 安装, F! L5 D5 @# f0 E1 g8 J
12-3 辅助模块单元测试 准备工作4 c+ W6 k! D# W
12-4 辅助模块单元测试 util 模块测试-
5 g$ X2 w( P0 O, n- C  m% i3 ~12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试
7 c8 }8 r# l( W( Y# a0 }12-6 辅助模块单元测试 headers 模块测试" M# @5 j/ L1 V1 H+ L& h" |
12-7 辅助模块单元测试 url 模块测试- j% V8 D+ X2 I8 c% t# e& E
12-8 请求模块单元测试 jasmine-ajax + 测试代码编写6 T5 C4 @9 K+ |6 o
12-9 header 模块单元测试 测试代码编写
. a& a$ a5 W: A, o8 l+ m12-10 Axios 实例模块单元测试 测试代码编写
3 d2 \  R+ d! N: V4 z) |$ @12-11 拦截器模块单元测试 测试代码编写" ^2 w6 m5 W- y; o$ E* F
12-12 mergeConfig 模块单元测试 测试代码编写
  ?* L* @; J: p. ~5 Y% t+ |+ p12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试
5 f7 V9 A+ L. b  G- J" ~12-14 剩余模块单元测试 defaults 模块单元测试" `" V2 L; N* _, a
12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试
/ C" I# K* r' _12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试
4 {5 ?2 t! {5 M* B: ^12-17 剩余模块单元测试 补充未覆盖的代码测试/ a) w- I' }% }1 m* k
& r: Q3 f* P5 ~8 b( q% [# A: O+ @
第13章 ts-axios 部署发布【向社区分享你的项目】
" V9 E" H) x' W* c. ?! q0 f讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。$ t5 \  L+ P, P5 t3 U
13-1 ts-axios 编译与发布 需求分析 + 编译和打包
) R9 h- x5 L7 z! @. X8 l4 t; D9 B13-2 ts-axios 编译与发布 自动化部署
% K! q% o/ I4 u( I' C* B& r13-3 ts-axios 编译与发布 运行部署脚本9 d/ A0 l2 @. H; U
13-4 ts-axios 库 在 TS 和 JS 项目中引用5 t: x/ I( R# ~% O- K# U
$ L/ v* o% F6 q( v' I. L4 D! ]
第14章 课程总结【知识梳理,巩固加深】
/ u+ M2 z$ G8 p) N$ ^' x本次课程的整体回顾,总结学习的内容。
. u3 h, t' ^: H- s* j. H7 _: M# m14-1 课程总结 与回顾0 I) E. ?% J% w3 K$ M

: F6 p# p: x2 E4 M0 R' G# `/ j9 v) q( R( z+ v6 K) B& F% U
〖下载地址〗4 x8 ]! k) p5 P4 g& }
游客,如果您要查看本帖隐藏内容请回复
  `) `; d. {. S
! s7 {( W, S) k# W4 q+ b

, s! z9 [/ g1 V: P7 j
回复

使用道具 举报

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 | 显示全部楼层
  a4 w- }; H: g; g+ g
正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则