基于TypeScript从零重构axios

  [复制链接]
查看3651 | 回复12 | 2019-8-14 22:25:04 | 显示全部楼层 |阅读模式
" t1 c/ a9 q  l# h5 Q6 |7 P
360截图167708098610583.png
4 ]9 i4 o! `/ v$ H( A1 [〖课程介绍〗
( K# N5 h9 u0 G        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
  ?4 O; U$ `* |8 c" r3 [, y4 x" E' \$ r8 I1 k3 o
+ I/ y1 G7 o0 i2 M# ?+ j" q〖课程目录〗" b6 f9 j+ m0 ]; {( s3 q' F
第1章 课程介绍【悄悄告诉你,一定要看,有福利】
+ H) L' R3 F. ~3 z$ E5 P8 M介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。
+ ^' Z0 Y5 i8 @9 W9 R1-1 课程介绍 试看# x. W6 F% p' ^/ |6 T

% H" h, W4 z/ ?. i% I第2章 初识 Typescript【初次体验】
# \* `6 `: {5 v' }教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。
/ y/ `9 T- z8 x1 u& U2-1 安装 TypeScript
) k6 x6 ]9 i* U- F# h+ I2-2 编写第一个 TypeScript 程序 试看3 _5 a+ w' F, q
5 N+ \1 x! t" X" s2 c
第3章 Typescript 类型系统【必备基础,牢固掌握】
3 Q8 J3 R/ ?$ H! i参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。
' {% g6 D2 y1 e6 B3-1 基础类型(上)
& x$ E7 j/ K! [" X; {, J: W) ^3 J0 y3-2 基础类型(下)
: k) [/ v4 e  A4 i; W) y3-3 基础类型(注意版本报错问题)
) n! u- s4 x; |  c8 I. M! o6 m2 F( Z; z3-4 变量声明 - var 声明" a2 h/ G9 h- @8 J+ R" ]% J
3-5 变量声明 - let 声明
- p# f, ~( r; q. ]3-6 变量声明 - const 声明; G6 E+ B+ s! P. A6 S3 p
3-7 变量声明 - 解构
2 }0 O# L# X' _: X- V3 A3-8 变量声明 - 展开+ {6 a) y' ?* K1 y
3-9 接口 - 接口初探0 ]" L* M& g" _# }  G9 c
3-10 接口 - 可选属性+只读属性2 u. H( e. b2 \% {( o& t
3-11 接口 - 额外属性检查+函数类型+可索引的类型, E9 I% i& s) |
3-12 接口 -类类型+继承接口+混合类型+接口继承类- ~! ^9 }, f+ p7 K! q8 |. m
3-13 类 - 基本示例+继承
3 p  |/ h! ~5 v; n" q3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符* ~. l' r- @. `- V
3-15 类 - 存取器+ 静态属性! m+ ~+ f" y/ Q  o9 D! d0 n) f
3-16 类 - 抽象类+ 高级技巧9 ]6 {' m4 w+ j( a, m  A+ p
3-17 函数 - 基本示例+ 函数类型$ @9 Q& J) |* x: N
3-18 函数 - 可选参数和默认参数' u# q9 G' [1 r# ]5 Z- o$ ?
3-19 函数 - this+ 重载
$ K) K* _) t8 H  V! ]3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
+ M2 ]. d1 `# O2 q3-21 泛型 - 泛型类+泛型约束
0 B- }* R  L' v3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型
7 v( \1 u/ W. \2 K! e3-23 高级类型 - 交叉类型5 v6 ?/ E3 N" u( a' K2 T+ F
3-24 高级类型 - 联合类型
( y2 z( ^  n: e! P3-25 高级类型 - 类型保护2 M9 D# H6 ]9 i8 y: N
3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型0 B* g6 E$ C  Q! }' n

/ Z! C+ T# @& ]; u/ Z: `第4章 ts-axios 项目构建【工欲善其事必先利其器】% @! P4 R  h2 Z" s: M4 h" v
分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。' e- f0 H5 e$ `5 C
4-1 需求分析
' ^2 R* l) d# s4 v) W& u4-2 初始化项目 - 创建代码仓库! ?+ X" S: g0 _2 E4 Z  b
4-3 初始化项目 - TypeScript library starter7 m1 s" k0 j$ C/ t9 J: a& K' r
4-4 初始化项目 - 关联远程分支0 R+ \  d% @8 r* b/ A; D8 j
4-5 编写基础请求代码 - 创建入口文件& i3 ?7 x; B) P; c7 F
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求; U& [3 u1 T# ]  F8 d7 [# c
4-7 编写基础请求代码 - demo 编写
9 x% s6 Y1 a* R$ G8 U) z) y
2 Z) Q. _' U- A4 C第5章 ts-axios 基础功能实现【核心流程】
5 Y& C8 G2 H8 h& `实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
7 z. Q% Y7 j4 x$ q* U5-1 处理请求 url 参数 - 需求分析
+ m# q# Q  Y( r& r, P% x" }5-2 处理请求 url 参数 - buildURL 函数实现
) f9 t: n4 e# r, H% A" Q8 V5-3 处理请求 url 参数 - 实现 url 参数处理逻辑
- @- [- X; @6 k. |9 K5-4 处理请求 url 参数 - demo 编写
6 q, I6 ^  l! G! R) ]% Y# I5-5 处理请求 body 数据 - 需求分析+ 实现 试看
. u- |8 n# }3 Z6 X5-6 处理请求 header - 需求分析
5 n5 U4 c- O9 i5 _1 Q  ?1 V! S( a5-7 处理请求 header - processHeaders 函数实现" T1 T8 u9 z( I) p/ z
5-8 处理请求 header - 实现请求 header 处理逻辑- n5 f) M9 s# ]: S8 V' E8 H
5-9 处理请求 header - demo 编写
+ c( S, ~+ W  e8 t1 P8 `5-10 获取响应数据 - 需求分析+实现  Q. P9 B/ u  s
5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用2 A5 S8 u& q$ Q; L% i: _* F, L/ D
5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用1 ~/ _  E( j( `- X% X2 ?
- D/ ]3 C0 d) o* N
第6章 ts-axios 异常情况处理【不可忽视的边界条件】9 W/ Q) M$ _1 t( g; m( O( J0 Q: {
处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。0 x: h% t# b3 s- j
6-1 错误处理 - 需求分析3 A% v! `6 ~( C7 I% \
6-2 错误处理- 网络错误+超时错误+非200状态码+demo
$ q6 i0 S' l, o& G# m1 a$ K3 a8 S6-3 错误信息增强 - 需求分析
: t! S+ l6 w; w+ k) I; Z, y( U# N3 `6-4 错误信息增强 - 创建 AxiosError 类+ I- u0 N  |8 O, E0 S. W
6-5 错误信息增强 - createError 方法应用+ 导出类型定义( Y5 k# N' W8 b& p0 C; C: z
1 e& q# Q+ b" U5 k% F* i
第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】
. ]0 M+ l( Q# g) M4 h' ~2 K: E/ p把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。
3 D  n( Y; W3 W8 w7 }  }7-1 -1 扩展接口 - 需求分析* v. `, T3 ?; ]7 t2 Y! {& b1 J  _
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类& x' m5 h, u5 V( d3 O9 }1 l: X  {
7-3 -3 扩展接口 - 混合对象实现+ demo 编写
& T& ], `+ J* K; a7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写
: Q5 f) T7 N: V7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写
) @5 D2 }" j0 @5 e: B  s
9 {3 u& }& M7 r3 f: f第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】
- g( p7 D* X7 b& N' i1 Y0 P- ?实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。
% J1 D4 J8 e+ k, _# Q8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计7 Z' L; X, d6 Y; d4 ?9 @
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现1 s! d1 e+ M( h, z# |; H3 m) N
8-3 -3 拦截器的设计与实现 - 链式调用实现
: b$ L. _6 l! K- `1 c' S9 t8-4 -4 拦截器的设计与实现 - demo 编写, z, U. a* o0 k+ O5 u

+ g3 L0 ~  R) p$ g8 f( e5 ~- L第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】
/ Z* i- P, u+ k9 n4 ?7 l& \让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。5 X5 d6 Z) T' S$ X. |: y
9-1 合并配置的设计与实现 - 需求分析 + 默认配置
& ^" [2 f8 N3 B" e2 N9 L9-2 合并配置的设计与实现 - 配置合并策略(上)0 @3 Z+ C2 u' M  I/ q7 ], {" h
9-3 合并配置的设计与实现 - 配置合并策略(下)1 B& W) r0 z1 F0 V+ u
9-4 合并配置的设计与实现 - flatten headers + demo 编写
7 _: j+ l) W  s# F% Y  j9-5 请求和响应配置化- 需求分析+ 修改默认配置: Z8 Q. R$ ~: v6 C  ?5 G
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写
# H0 D1 \. m$ y6 L( C9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现2 }6 W- ?  y& q: g6 I

/ y. G% _  J9 D* L第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】" n) F" Z: d( U; C( Z7 H1 Z
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
# z+ R- D7 Q# I7 v7 G4 I10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
2 b9 V4 [+ e! \4 L! q10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口
5 y6 r& B4 u% `# t8 R. a10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现0 q/ H2 v- C7 _3 Y
10-4 -4 取消功能的设计和实现 - demo 编写: u! P4 q7 G6 p
8 ~# ^7 T/ b" ~% K# o
第11章 ts-axios 更多功能实现【锦上添花】
4 h/ w. ?# H3 z: J5 ^实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。  ^3 [1 S9 C3 O, A
11-1 withCredentials 需求分析&代码实现& demo 编写
) F: A  R# J* P' L' a) F. z11-2 xsrf 防御 - 需求分析
/ w$ l" U  H( H6 Y+ s11-3 xsrf 防御 - 代码编写
8 ]4 {9 N) j' p+ u% ]( V: r11-4 xsrf 防御 - demo 编写9 x4 b2 a. O4 u$ m! }2 ]
11-5 上传和下载的进度监控 需求分析+ 代码实现
  n2 `' T% C/ ^3 M, h1 A11-6 上传和下载的进度监控 demo 编写
- N1 H& X+ m4 f8 F" v11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写
6 k* c# v( m5 N/ H* E& D, p11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
1 \. j; m# ]: q: z, D5 Z- X11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写% m  f; f" e2 q
11-10 baseURL 需求分析+ 代码编写 + demo编写8 Q1 {9 x( ?! D; N. V4 k5 u
11-11 静态方法扩展 需求分析+ 代码编写 + demo编写6 e3 |" ?# x" ]3 d- ^6 P/ s

3 C) r0 H: ~6 p+ S4 t- I/ R第12章 ts-axios 单元测试【保障代码高质量】1 p9 a8 r( Y( ^' o
先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%+ B' z# N+ u; u% {% J
12-1 前言
# u; m8 y' G  x1 A0 l12-2 Jest 的安装和配置 Jest 安装
4 l' A8 v  o! f+ W1 m12-3 辅助模块单元测试 准备工作
0 m5 G( f  L) ^) s& x12-4 辅助模块单元测试 util 模块测试-
1 P( O2 ]. ^" J$ [( I6 A12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试
" W. g; N$ e6 p: K. J12-6 辅助模块单元测试 headers 模块测试) @. c8 J# k% L  I. [
12-7 辅助模块单元测试 url 模块测试
" G; \! A( E- u1 {" A12-8 请求模块单元测试 jasmine-ajax + 测试代码编写
) v1 Q% y+ d5 |6 y, u12-9 header 模块单元测试 测试代码编写
# _0 H% l1 a. e. n* [% v12-10 Axios 实例模块单元测试 测试代码编写
: x% e% h1 b6 M6 F6 ]" o12-11 拦截器模块单元测试 测试代码编写
! z5 D- B4 H5 L6 p0 u9 Y12-12 mergeConfig 模块单元测试 测试代码编写
% N/ O1 ?7 u% X( k1 W0 R2 v1 [12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试
* a- C0 K9 y9 P12-14 剩余模块单元测试 defaults 模块单元测试
3 }% g6 c6 {/ P3 \' ~) A12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试
$ a( z5 a2 _" {# r12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试- _5 v) I  d! v( g
12-17 剩余模块单元测试 补充未覆盖的代码测试3 T! \: q$ m% w9 z

% b! _, P) [3 r& y第13章 ts-axios 部署发布【向社区分享你的项目】
3 X! t& P9 x+ q( v: q% h讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。+ d0 f$ b/ g- R) v/ q2 e
13-1 ts-axios 编译与发布 需求分析 + 编译和打包
& h/ O0 e9 p2 J" a9 Q* }4 D7 y1 z13-2 ts-axios 编译与发布 自动化部署
  L0 b: y) C) S& O& D, [# b13-3 ts-axios 编译与发布 运行部署脚本. n- `  d8 P/ n; q+ {+ J# o& m( }( T
13-4 ts-axios 库 在 TS 和 JS 项目中引用' |/ J% L) g- l0 [

7 a- k8 m7 r3 {( C& v第14章 课程总结【知识梳理,巩固加深】5 k5 j$ S0 @; ]0 s( C
本次课程的整体回顾,总结学习的内容。
5 |0 w7 J6 c/ t14-1 课程总结 与回顾; R2 r) Y  }2 ?) a
" j/ Q+ j3 E  t) ?# x$ T

7 M7 ~7 l4 Q  n/ q3 \+ `〖下载地址〗
  h8 \) g, i% V) s5 Q
游客,如果您要查看本帖隐藏内容请回复

; a4 [# @) a5 L2 a: L$ U3 p7 F9 w1 {0 M; r+ M* A
$ ^& L& L; L' |  S- ]
回复

使用道具 举报

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

# M6 H; h3 C, v  O  [正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则