基于TypeScript从零重构axios

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

1 T' {$ {9 k1 h2 q7 B, f: ~7 ` 360截图167708098610583.png
$ P/ x% |; O, x/ [" I〖课程介绍〗
" ^3 X% f8 h: M! V. o7 G        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @2 a: K) [9 }1 b: g' [$ z
, y4 x" E' \$ r8 I1 k3 o9 e7 E# ~' X# F7 q; T
〖课程目录〗
, k5 g$ d2 s, _- `) j' e第1章 课程介绍【悄悄告诉你,一定要看,有福利】
) \) n, m5 x9 ?! ^介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。/ v& x  P% E, h, b, n4 ?' f
1-1 课程介绍 试看
0 c' u5 s/ D) Y  ~* |
; H) T( O/ W0 G$ B8 i/ {第2章 初识 Typescript【初次体验】
9 v) v! }/ L9 }0 Y! Y8 `8 G教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。: o  ?1 ]0 T  Z% _7 U2 K
2-1 安装 TypeScript
3 \. h  z/ z9 e2-2 编写第一个 TypeScript 程序 试看
  x) f" F' u9 V! n$ X( K1 X; b! A* i2 _' x1 L: Z2 d  E
第3章 Typescript 类型系统【必备基础,牢固掌握】8 l5 f! k& x+ _0 S, l: M, B
参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。
/ V- \( U( Q, v) D' h5 \$ c& s6 w3-1 基础类型(上)4 b! K4 T+ y; L( Y% _# C  [
3-2 基础类型(下)
( y) ?# N+ @/ A+ @- t3-3 基础类型(注意版本报错问题)
; T6 u0 ^7 G) f' F# n3-4 变量声明 - var 声明$ g6 k' t  s6 N/ H# t+ p+ w
3-5 变量声明 - let 声明( _. C2 f6 w3 H8 v  f$ \1 y
3-6 变量声明 - const 声明6 c% O! |* X' W+ I0 `" F
3-7 变量声明 - 解构
4 G1 @  b& z' o3 j3-8 变量声明 - 展开
2 q" ^( W' }4 I4 U3 ~' Z4 V3-9 接口 - 接口初探6 v: s% A, C) y' `) I8 x$ p' l8 L
3-10 接口 - 可选属性+只读属性
$ G; p0 P1 J! x6 S& L3-11 接口 - 额外属性检查+函数类型+可索引的类型
6 O3 |1 {! H# l# @3 {0 u3-12 接口 -类类型+继承接口+混合类型+接口继承类5 v# `1 }1 @& J
3-13 类 - 基本示例+继承
9 |1 c# j: W. |( d& \3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符
( E' p- w/ G4 j* S3-15 类 - 存取器+ 静态属性
  O8 `, ?0 A# T! [6 a7 m3-16 类 - 抽象类+ 高级技巧
  s" F2 j( x+ \3-17 函数 - 基本示例+ 函数类型
& }( `, Y" Z1 _+ D. D3-18 函数 - 可选参数和默认参数8 d  o  C9 f0 \7 ^, E& I% w
3-19 函数 - this+ 重载  Y  h2 `" F! n$ X1 R5 U% @- Q$ e
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型% H* b: ^7 \3 D+ b
3-21 泛型 - 泛型类+泛型约束# W# W1 [% P7 S. `& K! B
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型
% w1 t2 Z! _4 x8 g1 O3-23 高级类型 - 交叉类型
* h! i( ?7 p9 N4 F3-24 高级类型 - 联合类型
, t) V3 ^7 O! p# ~$ E3 K& ?6 U0 C3-25 高级类型 - 类型保护
" Z! L; q. I8 U  M3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型
- ]9 l: B( y4 K# W+ b7 Y4 q2 n; U0 W5 o/ E) @
第4章 ts-axios 项目构建【工欲善其事必先利其器】
% k: U9 R- X2 o, B8 v分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。
' x* g2 P8 u& T, x4-1 需求分析9 k5 `7 B  P3 u0 {+ T
4-2 初始化项目 - 创建代码仓库' z. E/ _: s, l- C6 T7 s
4-3 初始化项目 - TypeScript library starter
' O9 d9 V4 f% R! H  Q. o7 q4-4 初始化项目 - 关联远程分支. m1 h1 c" S0 n. W% V' h
4-5 编写基础请求代码 - 创建入口文件
$ m6 b6 [4 C1 e0 c5 ?& B9 P5 p4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求
' U" R$ v6 F% ^) J" f4-7 编写基础请求代码 - demo 编写
0 D+ x' i: R- ?( W" L
$ Q; N3 W% \2 r: t7 i第5章 ts-axios 基础功能实现【核心流程】
5 b" F' M' N$ }3 V" @3 S( l实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。# f' }& m, R/ G) z3 c* Y1 P. Y
5-1 处理请求 url 参数 - 需求分析3 h( P/ G6 n3 i+ K& w) L
5-2 处理请求 url 参数 - buildURL 函数实现
$ O* F/ T9 X1 O) p% N: t5-3 处理请求 url 参数 - 实现 url 参数处理逻辑3 m- Y( q0 h( j& l; H- J2 |  `
5-4 处理请求 url 参数 - demo 编写1 ]- M1 a4 J1 \" L
5-5 处理请求 body 数据 - 需求分析+ 实现 试看# Q2 X% {* ~4 {) \, D
5-6 处理请求 header - 需求分析
/ ~3 ?. P6 Z4 U$ g( j5-7 处理请求 header - processHeaders 函数实现" [  k+ @) N# ^" H' U
5-8 处理请求 header - 实现请求 header 处理逻辑
" |( N+ ]! {" N1 o2 ?5 \5 a) @5-9 处理请求 header - demo 编写
  b4 b, a! [* h& x5-10 获取响应数据 - 需求分析+实现
. v1 a/ s( S( {* w, n" u2 _1 |; n5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用
% ~: [! Y5 z) M. H7 O. q3 v5 Y5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用( O# l9 n# f4 _% A1 E( m
/ H/ A% t5 B9 S5 B. J! Q9 X& q  E2 I
第6章 ts-axios 异常情况处理【不可忽视的边界条件】' w6 Z' v, Z; Q
处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。
/ l) @% `+ g8 D6-1 错误处理 - 需求分析
! I3 L, J& {4 Z  U6-2 错误处理- 网络错误+超时错误+非200状态码+demo" z' W4 m  W7 X% }" Y
6-3 错误信息增强 - 需求分析4 C' c/ |9 B. V# }. J1 e& E
6-4 错误信息增强 - 创建 AxiosError 类
- W7 ~; [' q/ K; {! Q2 N& X% A6-5 错误信息增强 - createError 方法应用+ 导出类型定义/ ]# ~+ }" u& D" P2 C: p
/ ]2 g) E! {/ Z, _2 q0 s
第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】( }/ n$ v5 N4 v# V+ Q* n0 G
把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。3 [9 t! _2 g$ G6 P3 O7 g( B8 f
7-1 -1 扩展接口 - 需求分析
/ m' j' X4 V% s3 ?$ [7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类
" i3 ~( q( [" X% O8 {7-3 -3 扩展接口 - 混合对象实现+ demo 编写
, d& G- h. O! Z( e7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写
# Z$ l6 T* K$ I5 Y+ C( p7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写. J1 a; {/ p7 C" M/ J
3 C" e2 N/ c; v( f" a* {
第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】) F. [; c6 J5 Y4 t* ?* r& ]
实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。2 w4 u  ~( W+ W& D+ l$ @. l
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计9 V8 z! B3 v$ N% {9 F% w
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现
, B9 u9 H) A6 b" K! U! o8-3 -3 拦截器的设计与实现 - 链式调用实现
* ]) A- u; G6 ?8-4 -4 拦截器的设计与实现 - demo 编写! B' v+ Z4 K$ y
! E2 R: q9 D8 @1 K/ Y2 C3 ~
第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】, }% k9 n7 V# O- e( U
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。; N* P* y! H) H" G1 l% f" ?! ^
9-1 合并配置的设计与实现 - 需求分析 + 默认配置
  |- B4 S5 F+ W$ z, \+ Q* s- I9-2 合并配置的设计与实现 - 配置合并策略(上)* j7 R  P7 w( t; ]
9-3 合并配置的设计与实现 - 配置合并策略(下)) ]/ b; {/ K! N' D
9-4 合并配置的设计与实现 - flatten headers + demo 编写  B/ H+ K, i) R# \* _& D
9-5 请求和响应配置化- 需求分析+ 修改默认配置1 w2 G" f3 b% I! `, a8 R
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写
& E% I5 h8 K4 o& \( @: L9 W9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现
4 S# G3 n' V5 x- w7 m# r# `7 m: G. m% `; k# ?
第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】' G+ w, l  ?5 h1 d  `5 P& Q
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。6 k5 `3 g3 \4 B9 v' a+ ]
10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
) z) W9 d9 F: N% S5 D7 |9 v5 w: f10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口
& i1 F  u5 a" @" f4 X10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现: ?! R, X  J: q2 S* K( Z* j* H
10-4 -4 取消功能的设计和实现 - demo 编写: x: e+ ^( l2 P+ c+ {! N% n

# d% b7 E# X) V! u: G- c第11章 ts-axios 更多功能实现【锦上添花】
  D6 h) V8 V3 `2 t1 V3 M+ H; c1 N实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
! p5 A+ G8 N" S9 Z4 k11-1 withCredentials 需求分析&代码实现& demo 编写
* M# q( J* A$ M7 {3 w+ `11-2 xsrf 防御 - 需求分析
, e# [7 q5 k& e7 p$ g! y" @: g- d1 O11-3 xsrf 防御 - 代码编写( l, W6 ]% _% \: Q+ g
11-4 xsrf 防御 - demo 编写$ J+ F! W1 l3 T5 x; F+ s
11-5 上传和下载的进度监控 需求分析+ 代码实现
" m+ ~3 r" k; S) p4 o7 C11-6 上传和下载的进度监控 demo 编写8 n0 }" J  ^+ `( t8 ?2 H
11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写
3 M5 n' ?' T( q, W. b; `8 E11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写. l7 h/ E. ~- O* I$ x1 ?
11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写
/ q: f. r. N: ~- F7 O/ C11-10 baseURL 需求分析+ 代码编写 + demo编写1 a8 l, l6 v1 g2 i. G
11-11 静态方法扩展 需求分析+ 代码编写 + demo编写
7 L  B: n3 j8 u$ Q
" c9 p- D! ^; T3 s' w! v, a/ U第12章 ts-axios 单元测试【保障代码高质量】
5 Q0 Z6 l9 ^9 Z8 M先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%
! `2 }+ c, [% k2 K( B7 x12-1 前言
- Y  ?% Y: w+ O- ^, D' C12-2 Jest 的安装和配置 Jest 安装; j" ?; `6 D. i5 l% ~# }1 n1 q. {) m
12-3 辅助模块单元测试 准备工作& M* K. z* j! V0 ]+ C7 U
12-4 辅助模块单元测试 util 模块测试-' R# J. I. [" `4 `" E
12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试- v6 j( w& r, a0 W
12-6 辅助模块单元测试 headers 模块测试
& _: v2 S" \# t2 X/ i12-7 辅助模块单元测试 url 模块测试5 _3 C" h( x3 }
12-8 请求模块单元测试 jasmine-ajax + 测试代码编写0 z9 i1 ]$ p$ @) T2 P5 p& ?
12-9 header 模块单元测试 测试代码编写
, f& k( d& P6 ~7 E4 Q12-10 Axios 实例模块单元测试 测试代码编写
0 D; a5 M0 \3 Y, i) k; i: K12-11 拦截器模块单元测试 测试代码编写
/ t* M  p. H( n+ A. F. y: y* J( I6 D12-12 mergeConfig 模块单元测试 测试代码编写) W: k- g, w5 \& r
12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试3 J, t" q. C" @# X
12-14 剩余模块单元测试 defaults 模块单元测试
4 b5 |, d2 Y" n" U1 X3 i12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试2 ]! E. J% {) S
12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试% ?8 w6 d% V/ h5 \; o
12-17 剩余模块单元测试 补充未覆盖的代码测试; E) B. N: F* w/ r% a! l2 P) U

5 _% v. _3 E* q1 o# S第13章 ts-axios 部署发布【向社区分享你的项目】& n0 s) V6 ~# z& k/ m: _! k4 Q7 ?
讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。+ ]9 d% _9 m: o( r
13-1 ts-axios 编译与发布 需求分析 + 编译和打包$ Y* s" l8 s4 O: \
13-2 ts-axios 编译与发布 自动化部署
$ z- W" v4 p3 ?) Z% n13-3 ts-axios 编译与发布 运行部署脚本4 d+ N1 B$ g; Y  Y5 [' v$ f
13-4 ts-axios 库 在 TS 和 JS 项目中引用
/ `! m& F7 p; f2 W7 o2 m4 ?+ f  x3 N3 |# n* F
第14章 课程总结【知识梳理,巩固加深】
8 c% ]. q+ R# n, A# |) \6 E% `6 j& T本次课程的整体回顾,总结学习的内容。7 A* _( r+ i0 Q6 T
14-1 课程总结 与回顾3 }% y' G, S* Z- f3 g, q! O
2 p$ ~# y5 b" K( n+ }
  z, I; a" V2 y, O' o
〖下载地址〗0 f- V: o) x+ P
游客,如果您要查看本帖隐藏内容请回复
2 {9 b3 ]5 B( x. Y- f/ k5 A

3 t2 |  k  y; P8 p2 e, K9 k4 Y0 A/ L3 ]7 p
回复

使用道具 举报

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 | 显示全部楼层

3 z/ A$ _  u( ^1 J' r( K( i% ~% L正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则