基于TypeScript从零重构axios

  [复制链接]
查看4570 | 回复12 | 2019-8-14 22:25:04 | 显示全部楼层 |阅读模式
8 O1 W. k3 n# ~0 g# Y; Q7 I3 t
360截图167708098610583.png
* X9 }8 i1 D/ J; P* a& A4 p〖课程介绍〗
3 |; S6 W+ w. B* J        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @5 k0 J- _7 `' r, |" ?* }: f* d
, y4 x" E' \$ r8 I1 k3 o6 Z* J9 W/ F7 }( i
〖课程目录〗$ Y; i4 `) K( ?
第1章 课程介绍【悄悄告诉你,一定要看,有福利】
9 S. \  b3 p; Y8 F介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。6 E+ t/ }6 _) M
1-1 课程介绍 试看
$ [6 O( `' Z( q1 C& l1 Z  n+ V5 N! L: I* m) m  w) ]
第2章 初识 Typescript【初次体验】
7 c8 ^/ m" W' r. J6 |. P教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。4 M3 {9 o  R, ]- q  O. r
2-1 安装 TypeScript9 c0 X0 x' v4 J: I$ j
2-2 编写第一个 TypeScript 程序 试看
- J0 D4 C3 }4 ?. v. [' L+ _0 h' M$ C! m* K) ]4 g
第3章 Typescript 类型系统【必备基础,牢固掌握】( y; _! ?+ C5 q1 Q. C2 p/ l
参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。
' [. C+ f  n1 v0 a8 r1 u; L- L3-1 基础类型(上)5 N* r3 y& j) T& q% F% G
3-2 基础类型(下)
; Z/ s+ S# ^. u) p( o9 s3 W3-3 基础类型(注意版本报错问题)! q$ l% g2 m$ s! p( p
3-4 变量声明 - var 声明+ q2 P1 a8 C+ s" t" l
3-5 变量声明 - let 声明
5 a  [4 Z/ B) J9 s; k3-6 变量声明 - const 声明& Z6 f& z7 t0 z/ h
3-7 变量声明 - 解构0 F" S/ g1 N" D; c
3-8 变量声明 - 展开/ Q' v8 u5 H3 G% `
3-9 接口 - 接口初探0 c+ G! f* z  N/ n! R$ E
3-10 接口 - 可选属性+只读属性
3 N5 ]' A- x# d: I* t! F, r3-11 接口 - 额外属性检查+函数类型+可索引的类型4 @* C: U2 v+ r; E5 U3 Z
3-12 接口 -类类型+继承接口+混合类型+接口继承类
5 ?4 ?  ~1 A1 J) P0 Z' E1 U3-13 类 - 基本示例+继承
  X, e* C  @" o3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符
! F2 U- d' v. |6 G' l3-15 类 - 存取器+ 静态属性
0 u% p- [0 q) q6 Q9 o6 R  i- E3-16 类 - 抽象类+ 高级技巧1 T2 a. Q( P0 E* M
3-17 函数 - 基本示例+ 函数类型, V/ z( R/ P( f
3-18 函数 - 可选参数和默认参数
" \1 \8 l6 Z% x4 T, j3-19 函数 - this+ 重载) x. G: K" B- h1 u& ]% P
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
9 E; j2 O* n: z2 O) _; F3-21 泛型 - 泛型类+泛型约束9 n7 y6 b5 o2 D! j" Y. L
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型
3 d. K; l; j5 y) T/ G0 U5 Z3-23 高级类型 - 交叉类型
6 P2 A) v  a; l* \0 X/ q# `3-24 高级类型 - 联合类型; H3 I( p2 p% H2 t0 F; k
3-25 高级类型 - 类型保护. {; ~! {' _( ~0 x2 }* l4 F+ n
3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型& O5 e, \% f; _. z  ]
6 r9 Z9 a* q8 @/ k2 C/ ~9 @
第4章 ts-axios 项目构建【工欲善其事必先利其器】
" ~# X& ^) J: O9 _分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。$ x4 b- s2 ~' j
4-1 需求分析% L( F" u: \4 {+ U  c; ?
4-2 初始化项目 - 创建代码仓库
  s( B! o9 c, t4 ]1 P7 q, f4-3 初始化项目 - TypeScript library starter
$ k# E1 Z1 y* u8 r9 T3 f8 S1 t4-4 初始化项目 - 关联远程分支& V# O& P  p) Z) d- G  Z/ I
4-5 编写基础请求代码 - 创建入口文件
6 s. f4 }$ l. z" p  }9 ~+ s4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求
3 j4 j9 i7 l' I1 L6 y& |4-7 编写基础请求代码 - demo 编写
! N9 Y. z$ o/ D
: v* W4 A) B, p1 C7 T第5章 ts-axios 基础功能实现【核心流程】6 [+ e5 x; }$ O( a. s2 |
实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
9 j# u# ^8 Y4 ^7 x5-1 处理请求 url 参数 - 需求分析
2 a+ I* y1 B2 M* f& f7 n5-2 处理请求 url 参数 - buildURL 函数实现6 ~$ K9 ?; O# c6 \1 y! L6 M
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑
% @4 B7 A/ N, @7 A5-4 处理请求 url 参数 - demo 编写2 a* }7 V; d- [5 a3 o8 S7 C
5-5 处理请求 body 数据 - 需求分析+ 实现 试看
8 T# @- F/ W  U; ~4 Z5-6 处理请求 header - 需求分析4 I# Y7 F! |" \$ _9 V& i& @9 l* `8 N. R
5-7 处理请求 header - processHeaders 函数实现! V: c7 a7 a0 @; G6 E
5-8 处理请求 header - 实现请求 header 处理逻辑
5 P" m6 R9 Q* P( h4 _5-9 处理请求 header - demo 编写9 f/ O' a6 r5 y) J0 N' n9 Z, ~
5-10 获取响应数据 - 需求分析+实现
% ~$ o: a( j  a! u8 ]5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用' ]) c  o8 X. Y* ~* }
5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用4 y, A3 _: E, F/ P& @4 u$ j; q

4 F7 ~5 J; w! E9 y, H8 V第6章 ts-axios 异常情况处理【不可忽视的边界条件】
+ r: [/ l- y. M% z. w5 A+ W处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。
- M8 m4 D) |( P- u" s" J0 }6-1 错误处理 - 需求分析) C; x  w6 j0 _7 T0 w
6-2 错误处理- 网络错误+超时错误+非200状态码+demo8 K& X# E" Q: Y+ U% X; o2 Y' X" t
6-3 错误信息增强 - 需求分析
* d2 Q& `1 P$ s# L1 r4 M6-4 错误信息增强 - 创建 AxiosError 类8 J& F  }: G; j8 E
6-5 错误信息增强 - createError 方法应用+ 导出类型定义# Z3 {6 E2 y" d/ ?% Y# [
9 Q6 @& v1 J1 o: Y8 ?! L2 O
第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】
) \; k; L  C. l把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。
$ h' |" _5 `# B/ T7-1 -1 扩展接口 - 需求分析
6 j1 r7 u+ e2 d4 \9 Y0 e5 L7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类+ A# ]9 J3 ?4 y0 u& p
7-3 -3 扩展接口 - 混合对象实现+ demo 编写
. r# X& \' l) ], L  w: D7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写
* ?6 B8 y$ f5 @8 ^; T' N' j7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写
" [% p0 T/ e$ M8 I# U
$ _7 _0 l8 t" h" Q1 N- u) i# P第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】  x, V- P3 x1 N$ d2 b' w6 a8 G
实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。$ ]. O, V3 [! P- D
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计1 D9 S, m. ^( @: o+ v; ?7 I
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现, F( e8 ]. D, J1 s
8-3 -3 拦截器的设计与实现 - 链式调用实现
+ g+ L4 c2 r3 y+ Z, v8-4 -4 拦截器的设计与实现 - demo 编写* e. b4 X0 [% G4 G

2 ]/ N  s; {( D% s. {* I第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】) B7 X. m! o2 J4 e' J& t/ \
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。9 m; h* G9 Y: }* v
9-1 合并配置的设计与实现 - 需求分析 + 默认配置" H1 W- [, k4 U1 {
9-2 合并配置的设计与实现 - 配置合并策略(上)+ k6 w$ P0 q& l/ t2 K' s& K# s$ @
9-3 合并配置的设计与实现 - 配置合并策略(下)
/ q) p) L$ S+ \: b0 O0 z% y' j9-4 合并配置的设计与实现 - flatten headers + demo 编写$ C4 V- z" g5 z
9-5 请求和响应配置化- 需求分析+ 修改默认配置
$ ^/ u& R) K# p  p- V2 V9-6 请求和响应配置化- transform 逻辑重构 + demo 编写
4 ?5 U2 o; f+ V& [! ?9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现( V% D1 I2 l: g& @- y6 a7 y

! M8 v2 F+ _! \! W; N) V第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】
; l5 t5 ~  ]' @9 L# P2 H5 \实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
2 f  G3 b0 H. L9 ^! q, A10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
3 _( J- U& U0 l/ w2 P10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口" P! A2 G6 Q6 R  {
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现& q. r: m' V* l% P4 ^  K
10-4 -4 取消功能的设计和实现 - demo 编写
$ R, w5 y6 E, w1 x: E& t
9 p1 m/ Z6 R* n: ]第11章 ts-axios 更多功能实现【锦上添花】1 \# V( R& P1 P* L* H8 U* _
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
* V0 `% X5 x, }" E  e3 r6 Y11-1 withCredentials 需求分析&代码实现& demo 编写# U" [- Z9 k6 l
11-2 xsrf 防御 - 需求分析
2 A7 u  |4 C! A' g6 x11-3 xsrf 防御 - 代码编写
; j9 e9 q! {" D% F9 J11-4 xsrf 防御 - demo 编写
: g3 I5 b. F# O4 `. e9 x11-5 上传和下载的进度监控 需求分析+ 代码实现
, v0 ]$ r9 Y* k3 v* _, ], S  ?11-6 上传和下载的进度监控 demo 编写/ o6 k: G2 O; P3 D
11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写( x& g& @7 c; R2 h
11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写: [7 g2 P. e* e9 J3 ?: L
11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写
' M. H4 P. x% u11-10 baseURL 需求分析+ 代码编写 + demo编写* M( m! q; y3 e3 o/ x) _
11-11 静态方法扩展 需求分析+ 代码编写 + demo编写
8 m+ R: O8 ^* Z# G' P( A
1 \- ]8 {0 g& t- Y& G; E- n$ {第12章 ts-axios 单元测试【保障代码高质量】
! l9 n) c6 ^6 i3 m先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%
5 t8 B2 K9 v" x3 v12-1 前言
& ]% z; E, B. J8 Z/ ^" f12-2 Jest 的安装和配置 Jest 安装
) u5 J$ p4 y# h9 I' W! j12-3 辅助模块单元测试 准备工作3 y" ~. r* ?  V
12-4 辅助模块单元测试 util 模块测试-
8 w# G7 a! Q" M12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试
9 @$ W) i5 m5 g12-6 辅助模块单元测试 headers 模块测试) I/ A( k6 h" s& I
12-7 辅助模块单元测试 url 模块测试
, T7 d1 Z2 l0 v. K, f; o$ w0 F12-8 请求模块单元测试 jasmine-ajax + 测试代码编写0 x2 U2 T  a4 }
12-9 header 模块单元测试 测试代码编写
8 {* j& i, s; T; l) N12-10 Axios 实例模块单元测试 测试代码编写
9 O8 V  X. d: M% j12-11 拦截器模块单元测试 测试代码编写
6 r+ t9 a+ ?  T* N! A0 n2 V12-12 mergeConfig 模块单元测试 测试代码编写
# g; m7 ?& h6 r12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试* V/ u/ R* p4 K8 K
12-14 剩余模块单元测试 defaults 模块单元测试7 [( p( E: v" D+ Q( D
12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试- y8 ?- x0 B# K0 h
12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试% ?( l' l: ]# `% G8 i
12-17 剩余模块单元测试 补充未覆盖的代码测试
) T( O  T/ H% m8 I2 S# l. u2 t* P( [& g; l0 e/ b
第13章 ts-axios 部署发布【向社区分享你的项目】
; ], S  ^% X1 {+ K讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。
* W5 R4 C; s- M, j5 E3 x7 V5 U13-1 ts-axios 编译与发布 需求分析 + 编译和打包6 c# Y" L- g) y0 F- w" ]
13-2 ts-axios 编译与发布 自动化部署
- L3 {# E7 t  ^5 g3 ], u13-3 ts-axios 编译与发布 运行部署脚本
2 e: X, R' N" R! W) V! }13-4 ts-axios 库 在 TS 和 JS 项目中引用
1 O( L$ ~. b* Z8 O) t4 F  J; L! h8 |* a% @" Y
第14章 课程总结【知识梳理,巩固加深】8 }1 D) V1 B$ q+ [; r8 N
本次课程的整体回顾,总结学习的内容。
8 @; a8 n/ J( Y/ u14-1 课程总结 与回顾
# r8 z! M* K) G
# e- v9 g2 z+ D0 p0 O7 g) G# S' [2 i6 P, \. s! I7 [4 S
〖下载地址〗
# J9 i: W  t5 Z: N
游客,如果您要查看本帖隐藏内容请回复
9 L! \5 n; K  d0 d/ G% z, j

. F6 h' k+ W" \4 M" [& a7 k$ k2 J$ s: F6 \
回复

使用道具 举报

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 | 显示全部楼层
4 z/ }8 N! z' }; ^! t' \
正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则