基于TypeScript从零重构axios

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

$ N9 V- G0 Q5 v. k; B$ n2 E5 _8 L/ e 360截图167708098610583.png
8 \; B' G4 c! z〖课程介绍〗
' S; t7 Q! m9 A' s# U- D4 ?/ X% e; q        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @# k- q5 @1 |% u( m! T
, y4 x" E' \$ r8 I1 k3 o
0 G4 b. q6 p' V$ g* i9 b6 e3 m〖课程目录〗/ S' u2 L7 ]0 T2 h( d
第1章 课程介绍【悄悄告诉你,一定要看,有福利】- _/ h& H; f1 p( w( E$ \$ \" j0 {
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。
1 k5 s% Y4 w1 n2 Y8 @1-1 课程介绍 试看
5 |* Z! ~; ^9 A( f8 h. c
# u% a  m. Z4 m+ e8 |& s第2章 初识 Typescript【初次体验】
+ [2 J8 T$ n. v* ^& `5 S教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。
3 Q  C- w) l* |! z- _2-1 安装 TypeScript
- l0 c+ \7 g: T$ p% d, O2-2 编写第一个 TypeScript 程序 试看9 s8 h% Q* V) M8 p% ^

* g) V; U; Y7 [/ E6 v* t  g) H% R第3章 Typescript 类型系统【必备基础,牢固掌握】
1 w  }0 _5 o+ i" K参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。" u7 R2 f* _8 Q/ N: w4 k
3-1 基础类型(上), p0 z. {* n  N! u
3-2 基础类型(下)
6 P" w! ^8 {( j" b0 S3-3 基础类型(注意版本报错问题)# k' U4 F' L/ V0 M& u
3-4 变量声明 - var 声明3 E" c( N9 L! W( j9 T
3-5 变量声明 - let 声明: l( B9 k3 ^# p! {
3-6 变量声明 - const 声明
2 C2 n* ~4 A  a# G, T) f1 q; W* A* D3-7 变量声明 - 解构' i1 b$ w+ \  p2 b
3-8 变量声明 - 展开
( `/ ^& `. C. s. x" {  O5 i9 e0 W3-9 接口 - 接口初探: ^- _3 F6 ~; i4 T3 a
3-10 接口 - 可选属性+只读属性
1 E1 O6 z( Q' ~  y6 V! c. O) ~3-11 接口 - 额外属性检查+函数类型+可索引的类型% H6 i# p0 ?2 u. j5 q! b; t
3-12 接口 -类类型+继承接口+混合类型+接口继承类
2 N) h# v( E$ ]) s( v3-13 类 - 基本示例+继承
  D' _- t3 C; h! S/ ~4 {" s. c3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符
; _9 I  {: S/ A" z" i3-15 类 - 存取器+ 静态属性% n- T! x  w0 D# u7 Z7 C- d2 N
3-16 类 - 抽象类+ 高级技巧
6 d. ?& K$ \! n3-17 函数 - 基本示例+ 函数类型
, k% ]* }# @, L6 g9 W& E4 ]" x3-18 函数 - 可选参数和默认参数
" J5 Q) q6 n+ v2 ]3-19 函数 - this+ 重载& J: j7 X& q  `; G& q, r
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型/ y/ l1 Y) E0 O  m8 w! `
3-21 泛型 - 泛型类+泛型约束0 ^) T. j9 I9 }6 S
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型& k: e2 v4 Y; n
3-23 高级类型 - 交叉类型
( [2 ^8 X1 ^6 @9 |' J, j3-24 高级类型 - 联合类型0 s8 P. {. U" F8 S. O
3-25 高级类型 - 类型保护
- s$ S9 F9 F2 y3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型) g/ u5 H9 u3 N$ b; _% H

+ n$ U, r$ {- Q7 V1 M( R3 L1 w4 ]第4章 ts-axios 项目构建【工欲善其事必先利其器】
9 I" W5 S7 m4 [/ ?分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。
- i0 J: N" S2 C. s/ D: K4-1 需求分析
, P1 O% s8 e% g7 w7 O" r4-2 初始化项目 - 创建代码仓库+ ^/ @; \3 C+ I8 c7 b& R) V
4-3 初始化项目 - TypeScript library starter# E/ }! @- @/ x  \) k, y8 ^  f4 c
4-4 初始化项目 - 关联远程分支. r0 ^; U" w4 s
4-5 编写基础请求代码 - 创建入口文件7 R4 W! X, [; y
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求
# Q" U2 z/ D: N' a  W/ ^8 _  t) `4-7 编写基础请求代码 - demo 编写
' @  m0 E8 q& f7 j  D  z& V+ R0 f& v+ `% m  A
第5章 ts-axios 基础功能实现【核心流程】
! a- S% Z6 f6 X* f实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
' ?% j1 s) Z4 y" v, K% e( y5-1 处理请求 url 参数 - 需求分析
1 P- P' H: k* Y0 k1 H! h7 }5-2 处理请求 url 参数 - buildURL 函数实现
! ^. p: Z, U* m0 ~5-3 处理请求 url 参数 - 实现 url 参数处理逻辑/ l. w# q0 S$ R, O& Z4 z1 G: d+ K) @
5-4 处理请求 url 参数 - demo 编写
" P3 F0 ?. {; \. [) [5 y5-5 处理请求 body 数据 - 需求分析+ 实现 试看
7 r/ Z& S: S( J& Y0 s/ X5-6 处理请求 header - 需求分析
9 v1 Q3 |) A1 K7 }6 u5-7 处理请求 header - processHeaders 函数实现
$ I0 i: F4 W5 u$ C/ h& I5-8 处理请求 header - 实现请求 header 处理逻辑- R$ @* T! }+ g' y
5-9 处理请求 header - demo 编写9 j8 h& u$ U" x. ?9 H
5-10 获取响应数据 - 需求分析+实现5 z- U6 {2 p  z( E7 ?
5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用
- d: k6 k  e+ g6 G( w) z5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用- n5 g) Z' j- ?& Y' Q" ?( d
# ?5 e9 m" a4 {0 H8 V7 E4 e6 m
第6章 ts-axios 异常情况处理【不可忽视的边界条件】
& c" |8 b, i+ S/ h: ]5 D, Z2 s处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。
' X- G& i, U+ r" ?+ \6-1 错误处理 - 需求分析3 M: l$ i' V+ e, _
6-2 错误处理- 网络错误+超时错误+非200状态码+demo* Z& v0 c, n6 c" k
6-3 错误信息增强 - 需求分析
3 o! r# V* {% i' `/ S6-4 错误信息增强 - 创建 AxiosError 类
$ O2 {3 R# L$ \6 O6-5 错误信息增强 - createError 方法应用+ 导出类型定义* m4 b* u, c2 B; `  L
& Y3 H4 u; T* ]+ Z2 I  A
第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】
; Z, a, C. C" M把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。
! @% G" f2 x8 S( ~% j/ k7-1 -1 扩展接口 - 需求分析; o0 f1 }0 y0 S% t( r+ j
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类
9 R' M. s, X* M3 }7-3 -3 扩展接口 - 混合对象实现+ demo 编写
- x. j" c9 G# r) b; p' k( h5 [4 K7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写/ j; S% }" h" }) _" ?& b( i" [+ [8 h
7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写+ F+ I; ]4 R! h0 f2 n/ N* K  o
3 D  t5 y$ W: F
第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】
$ G% n) |  U% `1 K$ k3 A0 U实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。! }. K0 ?5 A6 g/ s! Z1 N
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计2 w7 T5 L' n" b2 h$ W8 S3 L
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现5 Z( K% i- F/ B7 W/ `* {
8-3 -3 拦截器的设计与实现 - 链式调用实现
% M7 C. u3 h* _; z* z8-4 -4 拦截器的设计与实现 - demo 编写8 @. `4 O  |$ u% A, ?$ D: V
0 S: t: E# ^- p7 s( K1 t/ Y& G
第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】' b. Q5 c2 b1 P  C1 [. \. t' E
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。7 g/ v7 _9 g8 u% R. p1 Z/ n" E2 t
9-1 合并配置的设计与实现 - 需求分析 + 默认配置0 g2 s- x! S% ^* `" E/ G- `5 ]8 l. b
9-2 合并配置的设计与实现 - 配置合并策略(上)
6 g* O+ j1 Q, y0 t5 ^, z9-3 合并配置的设计与实现 - 配置合并策略(下)9 R( l4 G. {, h% f' a/ d5 s
9-4 合并配置的设计与实现 - flatten headers + demo 编写
& ~8 Q7 \* _2 A9-5 请求和响应配置化- 需求分析+ 修改默认配置1 X+ i, O' R* V) |% [
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写6 w( B1 @0 b9 x: d- X
9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现
0 f6 s9 E5 e. I' R5 ^9 C
, W4 S- Y8 }$ g, k% z9 c$ ?第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】
9 j! ?4 o, ]2 \: n# l实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
4 B3 o2 X8 h8 s10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案. D; P* I9 [0 ?. p4 ~5 r
10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口- k5 [, F+ F! g7 E5 i
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现
, l: u, q* }1 K8 G10-4 -4 取消功能的设计和实现 - demo 编写
& Z0 B! V8 S8 _! M6 A+ g1 P# }; [8 _  u7 W1 p. j2 _9 C. n
第11章 ts-axios 更多功能实现【锦上添花】2 L0 a' f6 L$ {! R" W! V
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
. ~/ f# ^  Y  }& D5 }# R11-1 withCredentials 需求分析&代码实现& demo 编写, a, U0 E! |% C2 F
11-2 xsrf 防御 - 需求分析% P; R0 c5 m7 i% J/ L1 F
11-3 xsrf 防御 - 代码编写" t# g# C4 M6 N5 C2 b/ V" s
11-4 xsrf 防御 - demo 编写3 N" ^. N& f3 a4 m6 |& O0 O
11-5 上传和下载的进度监控 需求分析+ 代码实现& d  d7 N% }% f' y) S" W- w
11-6 上传和下载的进度监控 demo 编写
. ^! `9 W2 M8 Y& ]& Y11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写2 J8 U% p$ d, ^2 a; g/ ?5 P  J. J9 L
11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
! U' u4 }8 U5 |8 x5 H4 h11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写; ^. y2 o" @5 u9 @$ {7 `# E5 z
11-10 baseURL 需求分析+ 代码编写 + demo编写  h* Q* Z/ ^, ^# c
11-11 静态方法扩展 需求分析+ 代码编写 + demo编写# h  q$ P- H  P. o, O
6 f+ S5 S; w9 F5 m
第12章 ts-axios 单元测试【保障代码高质量】8 i- L! v& [6 I  O+ p, @" K3 H
先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%/ R8 d' t6 t0 K9 t8 E( y$ b
12-1 前言+ s$ Y: |$ W: }, d) O
12-2 Jest 的安装和配置 Jest 安装
4 d0 q$ X+ Z# U  t! e12-3 辅助模块单元测试 准备工作
, `/ j" c" F0 {6 ~+ |" p3 g1 E12-4 辅助模块单元测试 util 模块测试-7 l4 U+ }9 S5 G: ?2 v3 J# @
12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试
4 x. ^4 E8 y1 b$ J' h/ {12-6 辅助模块单元测试 headers 模块测试3 i9 Z1 k5 n7 e! d
12-7 辅助模块单元测试 url 模块测试
. v" J/ o# L8 e9 h/ j- p9 h12-8 请求模块单元测试 jasmine-ajax + 测试代码编写
/ V+ F3 l3 p# `* S* e% y. C6 r& N12-9 header 模块单元测试 测试代码编写2 f# Y* ^. a  H3 `" g8 P
12-10 Axios 实例模块单元测试 测试代码编写5 V* I* w# o. q$ q1 |: B
12-11 拦截器模块单元测试 测试代码编写! e- p% d% O( \& @
12-12 mergeConfig 模块单元测试 测试代码编写
0 z! x6 D# b( g; f- X9 r12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试4 A& t: L% l( z& K3 U' K
12-14 剩余模块单元测试 defaults 模块单元测试) Q6 ~5 [9 M" E& F
12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试. B4 i$ m# N: U
12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试
! U5 z; X' V" z2 t9 z12-17 剩余模块单元测试 补充未覆盖的代码测试& E, i$ J. i& H+ u7 s

* E0 m' U9 a: r; j/ R第13章 ts-axios 部署发布【向社区分享你的项目】) |4 P5 ?1 M+ b& j# o" p
讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。
* g# c1 Q, O  b9 w, w, i13-1 ts-axios 编译与发布 需求分析 + 编译和打包
0 W5 o) S& w7 U13-2 ts-axios 编译与发布 自动化部署! a& _8 u/ T, g& x
13-3 ts-axios 编译与发布 运行部署脚本9 Q0 p# u- a4 {7 Y# z
13-4 ts-axios 库 在 TS 和 JS 项目中引用
+ F9 b  F) P( n$ x1 _3 S' K+ D5 S) R
$ \  G( s5 V$ y' q# p6 D* M第14章 课程总结【知识梳理,巩固加深】
7 B, d! }9 v* X3 ]& [+ K本次课程的整体回顾,总结学习的内容。
, t0 Z, ?2 j; @" F& t0 q14-1 课程总结 与回顾
* d9 T9 c: |& `) S
8 n( S2 R9 A7 p# @& s2 m  q9 y1 X% E
! B# C/ ?% S; d! }〖下载地址〗
4 o% N" Y# R$ r6 j( \, D
游客,如果您要查看本帖隐藏内容请回复

4 I# P1 M$ \) d
. j5 z" e7 e9 l8 ]2 w8 C" `, V+ h) C
回复

使用道具 举报

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 | 显示全部楼层
) Y- u9 i% P* J& I; z
正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则