基于TypeScript从零重构axios

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

# t! Z* N4 s/ k% w2 q- Z' N9 ?) b 360截图167708098610583.png
3 D, q' g; ]+ j/ b〖课程介绍〗7 S) G0 g' }. l1 d+ t2 J4 T
        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @. T; e  R5 N  Z4 {$ w" y; ^
, y4 x" E' \$ r8 I1 k3 o
& a8 l# x" g4 Q5 U$ r& I〖课程目录〗/ j% I1 E0 j. W$ B
第1章 课程介绍【悄悄告诉你,一定要看,有福利】
& g' r! E$ T  }' _& z3 U+ i介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。
4 [" J" }! T' `" ]; B" R% g2 t1-1 课程介绍 试看- G3 h5 v7 X( N: o; [

5 a4 o: E& \8 Q第2章 初识 Typescript【初次体验】
( ^* i& {% l% q. M9 {4 W/ D教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。
  l/ P7 t9 p1 G2-1 安装 TypeScript$ F! `& Y: U, R" I2 j( x& e% W; K1 ^
2-2 编写第一个 TypeScript 程序 试看
! {! }7 p4 T# S) r7 ^' E2 m( Q4 D# E
第3章 Typescript 类型系统【必备基础,牢固掌握】( i2 D3 Q& j8 d$ I6 k% v5 u
参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。6 ~  X: u7 D% J
3-1 基础类型(上)
: X( Z- b6 u$ H% z2 _3-2 基础类型(下); \8 X3 e3 x; Y
3-3 基础类型(注意版本报错问题)' ?1 i! a7 l% C8 X6 t
3-4 变量声明 - var 声明- ~. [) y4 Z: M, C- D3 v
3-5 变量声明 - let 声明
* |8 A; N# o( \' v0 j$ n3-6 变量声明 - const 声明
* V, i$ V- J) o: b) h3-7 变量声明 - 解构
4 h+ n1 w7 W% K6 B$ k5 _) r: u3-8 变量声明 - 展开
3 _* E& H* Z& f0 c3-9 接口 - 接口初探
$ j9 p" x, i* ~$ A3-10 接口 - 可选属性+只读属性6 b" @( y3 ~( E2 Z+ Z1 {/ r! E9 M1 C
3-11 接口 - 额外属性检查+函数类型+可索引的类型
  V% i3 v6 R* c' {/ Z8 I3-12 接口 -类类型+继承接口+混合类型+接口继承类
/ p1 b) M4 g! R4 d; }! d3-13 类 - 基本示例+继承
* C8 S4 k, [+ K% I! W3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符
2 Q) E5 t$ }5 A' Q2 Y! I3-15 类 - 存取器+ 静态属性
' {$ G2 ^$ k2 V- I" d3-16 类 - 抽象类+ 高级技巧7 O4 ^! |# O$ f
3-17 函数 - 基本示例+ 函数类型
+ u2 C$ [9 c6 c  H2 v* q3-18 函数 - 可选参数和默认参数
2 a2 \( ~5 V( o' A& Y8 i. F3-19 函数 - this+ 重载+ z3 t4 _- t" i
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
  A' g$ c% z; Z1 M: e/ C: s3 l3-21 泛型 - 泛型类+泛型约束
# G2 W. t( L' |4 f: Y9 G3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型( o* K: y: I3 ?; ]
3-23 高级类型 - 交叉类型' z7 H8 y% ~$ M0 D
3-24 高级类型 - 联合类型
, F" Y% _+ g! z3-25 高级类型 - 类型保护" D* `( M, M: D
3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型
7 I* t& b7 q5 a5 q
, N) k& A) C+ O7 S第4章 ts-axios 项目构建【工欲善其事必先利其器】
6 x. ]+ x* }& V( ?! \分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。6 P" u7 S& t# U2 Y
4-1 需求分析3 g( y. D  ^7 O4 G( \! c; F4 K; T
4-2 初始化项目 - 创建代码仓库
+ [+ M4 B+ ]! N4-3 初始化项目 - TypeScript library starter
) [( c+ J( p0 m* g+ X- R8 d- ^" W/ v4-4 初始化项目 - 关联远程分支- a: ?6 E* f, D  M3 X1 D# ^7 E
4-5 编写基础请求代码 - 创建入口文件
( F& l, j  |- G0 t0 B4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求
" x+ k* g! R; L& e5 z# y$ z4-7 编写基础请求代码 - demo 编写) c3 v9 [; ~# w) w
. o8 g- _# `: y8 M# A
第5章 ts-axios 基础功能实现【核心流程】
: C4 v8 H" Z# v" M* _4 Q, @8 K实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。/ [1 Z" s, F  B9 _6 b0 P
5-1 处理请求 url 参数 - 需求分析! V! |0 B5 ~- D; u* V1 N  B6 Y
5-2 处理请求 url 参数 - buildURL 函数实现2 r: n; A# V1 k) W
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑
, w5 R4 i3 Z# ?5 g' U  k0 G5 w6 S5-4 处理请求 url 参数 - demo 编写
$ J7 s" n& y1 V5-5 处理请求 body 数据 - 需求分析+ 实现 试看, l" i! O& \+ C3 l' g0 b0 D+ [0 c
5-6 处理请求 header - 需求分析  ~: H2 p7 A, o5 q1 P, s* x- ^
5-7 处理请求 header - processHeaders 函数实现) j# j- ]/ D2 {
5-8 处理请求 header - 实现请求 header 处理逻辑
- T- B8 j8 e. p9 ?5 x5-9 处理请求 header - demo 编写
, k' n* \2 M- `* ^" K5-10 获取响应数据 - 需求分析+实现
/ Z' `8 Y1 m. O' ?1 u/ q5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用
# h. T9 I+ D, v6 J* `6 e5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用6 S8 [5 \& a, S8 C% f- T$ N

' @+ c4 O8 g3 a6 j8 s第6章 ts-axios 异常情况处理【不可忽视的边界条件】
" _) s3 r6 \( }# U7 R' y$ A8 r! V. Q1 ~处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。
! G. F5 i1 s) N5 y9 e2 h* {7 C. @6-1 错误处理 - 需求分析
  C$ M. Y: c3 [# y0 t/ b( j6-2 错误处理- 网络错误+超时错误+非200状态码+demo
4 W$ K9 I. ^/ Y" z2 H" E6-3 错误信息增强 - 需求分析
' P* V5 \1 l5 _, j) u6-4 错误信息增强 - 创建 AxiosError 类+ R9 i" D0 z3 v" ?' @
6-5 错误信息增强 - createError 方法应用+ 导出类型定义& n7 I2 c3 w$ x0 y$ j6 t; r# }- v' `1 f
. H' B, A- B; c8 h8 d( ~$ M
第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】0 x: g' `" v2 k+ |5 ^) T# S
把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。
3 z# U* J/ l- G3 L9 l) }3 y9 x7-1 -1 扩展接口 - 需求分析% a6 N& t4 ?- _* }* X5 L- U& W
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类5 z$ \# H# o# R2 W8 z1 q  S
7-3 -3 扩展接口 - 混合对象实现+ demo 编写' ^4 |" U: T1 a# l. y, h6 p
7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写9 x- v$ X$ ]4 B
7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写
) o# j/ e1 z9 H+ h) S; V$ z: P! ~) m% G7 K6 v- u2 }. l
第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】; ~7 B5 _' C- {3 g
实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。8 P" n3 ~* ^; Y4 b9 F
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计1 m' m6 D4 L) [7 s2 I6 W7 i4 [
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现6 k3 k) t, H) b. Y
8-3 -3 拦截器的设计与实现 - 链式调用实现/ g1 @1 s" F- f8 o% j& r* y4 M
8-4 -4 拦截器的设计与实现 - demo 编写# S1 W3 r% Z, o
$ g; p2 p7 [8 R- q) }
第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】
" G/ t4 t1 f! \# e) g让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。
8 C4 s4 y! K  q$ C* r, m  \% \9-1 合并配置的设计与实现 - 需求分析 + 默认配置
4 z" U& w. t% J9-2 合并配置的设计与实现 - 配置合并策略(上); S% H" v+ X$ f* E
9-3 合并配置的设计与实现 - 配置合并策略(下)
4 {! D" f; [+ Z- R  j9-4 合并配置的设计与实现 - flatten headers + demo 编写
& S6 ]7 N$ ]" f& [. [9-5 请求和响应配置化- 需求分析+ 修改默认配置1 G( T1 t5 T7 w: N( d5 P
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写
/ D. i" c4 H4 |- L6 P; @# M9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现
& M: \" u, A0 P9 E9 K
/ [: j( F2 D$ k$ ^第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】2 T( S" R9 U! _; w2 Q: `* `& A
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
3 b$ ?: S6 f4 \: Q% I. s10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
% E* H+ J& S: Q! ]- j$ y  H/ X10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口
/ e7 R& B$ a/ P4 G9 Y8 `- c: A10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现
, X+ P+ @# u/ @6 j8 Z! N10-4 -4 取消功能的设计和实现 - demo 编写% A- C$ @- E$ ~$ d. d

8 }* x& O+ M7 o: u9 V5 E# w第11章 ts-axios 更多功能实现【锦上添花】
$ ]/ n* k) G+ p  B3 U9 r( D6 T实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
9 v' j# J3 r! ~+ A11-1 withCredentials 需求分析&代码实现& demo 编写8 X  S( z: N0 B4 E0 ]' W
11-2 xsrf 防御 - 需求分析
! v& v' Z) f: M+ M+ ^' Z8 b11-3 xsrf 防御 - 代码编写
) U6 S: E$ R- @9 a; m11-4 xsrf 防御 - demo 编写
: w, r1 |) n6 J2 z1 B6 w" d11-5 上传和下载的进度监控 需求分析+ 代码实现
1 ~& l- [: w4 C5 u+ G/ P11-6 上传和下载的进度监控 demo 编写2 J* Z4 Q9 H5 f
11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写
8 U4 t" z/ X' f1 p1 V- i+ _+ |; D7 j11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
. n8 a- n; M* t11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写9 w# O6 P1 c& a5 P/ Q4 e6 a, e/ l: T
11-10 baseURL 需求分析+ 代码编写 + demo编写6 j6 ]% Z* \3 s5 [' M# c* u
11-11 静态方法扩展 需求分析+ 代码编写 + demo编写$ N6 X6 @" b1 W  \
) R  A% E* |; {& ?
第12章 ts-axios 单元测试【保障代码高质量】4 N3 p3 X: g6 x) n7 ]
先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%
( M* N- I* y; O# t" G12-1 前言
8 P* q/ K7 P7 f# Y2 w+ a12-2 Jest 的安装和配置 Jest 安装
# w' [$ f# T' T' B2 O12-3 辅助模块单元测试 准备工作
/ O6 ^7 ]! w  v) c8 z" f. I12-4 辅助模块单元测试 util 模块测试-* U" Y/ [8 A0 i- ?* J* y2 `  C
12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试( I  m3 p- A! t1 Y5 C7 C# A
12-6 辅助模块单元测试 headers 模块测试
) x. {8 F4 f& X0 t" U9 d12-7 辅助模块单元测试 url 模块测试# H  b/ Q3 b* i7 L  l
12-8 请求模块单元测试 jasmine-ajax + 测试代码编写
( C! X& m- E6 D! }9 }' `; ?12-9 header 模块单元测试 测试代码编写1 Y: d$ Z% C/ J/ i" G( y
12-10 Axios 实例模块单元测试 测试代码编写5 `) p/ V# L+ L1 f/ J  _
12-11 拦截器模块单元测试 测试代码编写5 f9 R" M' X3 _4 w
12-12 mergeConfig 模块单元测试 测试代码编写. c- C& D$ O+ r' [9 X. p& D/ I
12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试) `1 }! T, F# e% ]* M6 F
12-14 剩余模块单元测试 defaults 模块单元测试8 G$ |9 R* ~- y8 W' Z
12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试
+ }7 J/ `) N7 S4 d12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试
: m0 D, R  E' V3 l: `* V12-17 剩余模块单元测试 补充未覆盖的代码测试, a2 |  x6 e1 M5 w
) @& @# m+ t% g) F. N
第13章 ts-axios 部署发布【向社区分享你的项目】
3 x7 ^8 E. v  L7 x+ x讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。
* u* z1 b8 \5 r7 @13-1 ts-axios 编译与发布 需求分析 + 编译和打包" U9 `" B3 l% W7 `+ x1 O% N: z
13-2 ts-axios 编译与发布 自动化部署
$ }, L: v! y( K3 o7 n/ D& g7 ^13-3 ts-axios 编译与发布 运行部署脚本* S; w& n' Z. I; C
13-4 ts-axios 库 在 TS 和 JS 项目中引用& r( L) m5 Q  D& v/ a

; y- O, T) s6 V5 E& V+ O第14章 课程总结【知识梳理,巩固加深】9 W. m; D& M) ~- B2 f. T4 P& a/ Q
本次课程的整体回顾,总结学习的内容。0 x; }) j& Y" Q& X* J) {
14-1 课程总结 与回顾9 B* M$ L3 {& c/ `/ f4 E
7 q$ v8 Q1 h; J8 B5 }
  z" u% E  }4 [' s, t# |6 N1 q* S
〖下载地址〗
" f6 Z5 ^9 ~7 m
游客,如果您要查看本帖隐藏内容请回复
1 j6 `6 ~5 n8 e! h2 Z
2 D% o4 l; H+ }5 R- y
% z: |0 K6 s8 B$ H- {3 q2 k$ _% q
回复

使用道具 举报

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 | 显示全部楼层
  u+ X; @" m# y
正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则