基于TypeScript从零重构axios

  [复制链接]
查看2461 | 回复12 | 2019-8-14 22:25:04 | 显示全部楼层 |阅读模式
* \. F  p7 c# p; W
360截图167708098610583.png 7 l: i9 V8 a( ~$ R1 g: {, A
〖课程介绍〗
4 ^( B# c6 r7 M! r        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
; ^7 O' O& v: m$ I( ^1 S, y4 x" E' \$ r8 I1 k3 o
$ r) \: h4 R- c* ?〖课程目录〗3 A# ]# M' t7 T
第1章 课程介绍【悄悄告诉你,一定要看,有福利】- c+ I7 p+ i7 b; b5 G  k* w
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。
- i+ v8 N  F. i4 ^- {5 R9 w1-1 课程介绍 试看0 B, {9 A5 l+ f; ^  b* p' A, J) {
4 T' \, y, H; x) R5 |. W; ]
第2章 初识 Typescript【初次体验】
! z4 E3 _, R! Q教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。! A2 r* f! K" x
2-1 安装 TypeScript
" J; K' P% L7 ?& A3 o6 p4 L2-2 编写第一个 TypeScript 程序 试看
. K' D. p# C: o, [7 y8 `
* U* E- y: L% f第3章 Typescript 类型系统【必备基础,牢固掌握】
* d. w' q# V& u( g9 h: f6 I参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。" m  x( s8 M' n0 X6 `
3-1 基础类型(上)' F# X. b  L" |9 F0 l7 W: N5 X+ G
3-2 基础类型(下)
2 K/ G/ Y2 \& |: V. p( U  {/ {3-3 基础类型(注意版本报错问题)
# k" |6 |7 w1 f0 D9 u* n3-4 变量声明 - var 声明
7 ^0 A- ?8 _; n3-5 变量声明 - let 声明
0 O+ u) d5 H' |, ]3-6 变量声明 - const 声明
1 _! {6 w- x* x# d# q3-7 变量声明 - 解构+ v9 X$ V/ K2 f: K0 [$ N3 C
3-8 变量声明 - 展开
2 ?  i) w5 H" S6 L3-9 接口 - 接口初探
# k4 g2 q' t/ S7 Z  y- f& K3-10 接口 - 可选属性+只读属性
" W0 [% i4 b* }' U3-11 接口 - 额外属性检查+函数类型+可索引的类型! x: h" b; J8 F  n# u* Q) {' @
3-12 接口 -类类型+继承接口+混合类型+接口继承类
+ m$ ?* r' T) \' K3-13 类 - 基本示例+继承
& U& l3 F8 o2 q/ z8 ^3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符: t1 V( Y- o& P* A
3-15 类 - 存取器+ 静态属性" Y' n2 P6 _0 w9 W; U' p& ]
3-16 类 - 抽象类+ 高级技巧8 H0 U' j4 H2 _, ~4 [% L
3-17 函数 - 基本示例+ 函数类型
% j2 B1 C' y" h5 A. s: k3-18 函数 - 可选参数和默认参数% G/ C# l* w( }: h
3-19 函数 - this+ 重载
, M) Z8 d( R3 p8 ?8 I6 P+ f3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型; [% U4 r: s  {% P
3-21 泛型 - 泛型类+泛型约束
( @; T  ?5 o0 H) B- N, v3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型
+ P' V5 [: c& x( `5 D3-23 高级类型 - 交叉类型
2 d/ I0 {/ A* a' j3-24 高级类型 - 联合类型  Q' M$ r# I2 i: u4 d" o8 O+ g
3-25 高级类型 - 类型保护, z) l& x: P' `2 s) D
3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型
3 G7 b. o, W7 @) E' |+ {
$ y8 n+ b" \+ R; w9 y. X6 U第4章 ts-axios 项目构建【工欲善其事必先利其器】7 {% M) ~8 g7 {5 C
分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。% h3 r" C: A, ^6 S6 {
4-1 需求分析5 V' N2 u. @- v: B+ J4 E* O+ ?7 o
4-2 初始化项目 - 创建代码仓库
/ ~, q& A1 f) @! w$ {4-3 初始化项目 - TypeScript library starter0 m1 j9 P6 j" A2 _7 M* h% u' x; ~
4-4 初始化项目 - 关联远程分支" j. R" l0 ^% y' y: V
4-5 编写基础请求代码 - 创建入口文件7 P: I/ X2 K- M
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求3 O7 q# o* k- R7 R% C
4-7 编写基础请求代码 - demo 编写) p5 e2 Y% `$ T/ ?$ W1 C; q# [

; Y9 V- q2 x; e: W第5章 ts-axios 基础功能实现【核心流程】
! i6 x0 y) X6 ]实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。! t+ i: D/ T- I' U
5-1 处理请求 url 参数 - 需求分析
! r! ^. c$ U. }: @3 D5-2 处理请求 url 参数 - buildURL 函数实现4 ~9 V& n+ Z/ v1 T4 ~
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑3 L! S1 i* ?' E+ k! E1 @
5-4 处理请求 url 参数 - demo 编写
% s& Q) z! l5 v( e7 i2 e' \, G% i5-5 处理请求 body 数据 - 需求分析+ 实现 试看
$ P& L+ e- w3 ?/ d5-6 处理请求 header - 需求分析
  S9 Q9 e4 z7 w! U6 v# t, ^$ [5-7 处理请求 header - processHeaders 函数实现  C' S$ j( m' x& K. ^
5-8 处理请求 header - 实现请求 header 处理逻辑; J# _' r/ t# w4 y$ W
5-9 处理请求 header - demo 编写
0 ]# b7 e! _+ Y! L, u5-10 获取响应数据 - 需求分析+实现
3 f  k- T) {! _8 d& x5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用2 y& A! o  W4 A% m2 h- c  {' T
5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用" E5 L3 n: b7 b/ Q

- K5 R% p. R/ o) n5 s7 v9 C第6章 ts-axios 异常情况处理【不可忽视的边界条件】
+ @9 h% t$ j/ q) v处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。' x* X3 Q$ Z$ z" X: I! Y
6-1 错误处理 - 需求分析
; E8 Z! W( u8 [! t- R! @6 K6-2 错误处理- 网络错误+超时错误+非200状态码+demo" i1 G) O4 S  \6 T! y+ c
6-3 错误信息增强 - 需求分析
8 T( G' y( c! W1 k# U6-4 错误信息增强 - 创建 AxiosError 类
2 D7 z0 ]9 g- d* z( ~6-5 错误信息增强 - createError 方法应用+ 导出类型定义( g( |3 ^+ H/ a$ ^1 a/ q  u7 g2 A. M! ]; I- v
; p! F7 V9 O3 @/ D( B1 w
第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】; D. V( @4 m4 G; W& F1 I6 w
把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。  V( j4 r+ H) ~. ?2 U  c
7-1 -1 扩展接口 - 需求分析
5 }0 ?( L. H5 m* k5 Y0 G7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类
' |. q! l3 O# C6 Q7-3 -3 扩展接口 - 混合对象实现+ demo 编写! N" a! j1 a. g" u3 C
7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写
/ ~& i6 |; h+ k: L, Y/ n7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写
( |& o2 s, {) [9 {/ w) Q# a) f, }
第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】# [  }. E2 Z) H; s4 w# _# T
实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。+ P; x  W& l( p- i: t2 W+ |, U  ?
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计
3 c7 j$ s0 N$ o8-2 -2 拦截器的设计与实现 - 拦截器管理类实现
( x8 O4 Z  ?. ~; E! ]8 E8-3 -3 拦截器的设计与实现 - 链式调用实现
9 y- o; X: |# k% G, O8-4 -4 拦截器的设计与实现 - demo 编写
# ?' c' N# n1 t* k8 p
# D* S5 X2 j$ t; x* G& k第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】7 e1 B; D0 V5 p# y. X
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。
( S. e1 e- b+ j7 ^& L( P' F" ?9-1 合并配置的设计与实现 - 需求分析 + 默认配置2 `5 u& T4 [& [! E: k, O
9-2 合并配置的设计与实现 - 配置合并策略(上)3 r" i" p2 @3 L' g$ F, o- N9 \1 L; I
9-3 合并配置的设计与实现 - 配置合并策略(下)
  V- {. k% Z# ~" ]9-4 合并配置的设计与实现 - flatten headers + demo 编写+ G7 _5 U* N0 {3 C1 S
9-5 请求和响应配置化- 需求分析+ 修改默认配置7 l' V8 d2 c1 ?& `' x
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写
# e3 H* U8 \# P  S5 j, k3 [/ P# i9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现
- x5 k+ M+ M+ B% k, v/ x; T
. p2 M6 M7 I% V! R第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】1 u, D& d* c# f5 L+ G, ]! X- y( B
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
* W  h8 P! o2 N10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
) L( r3 y, Q. f7 k+ S! x10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口& L8 K8 `+ P0 K  h( d3 _
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现6 B; [5 y$ m3 N* c9 C  M2 k2 j1 n
10-4 -4 取消功能的设计和实现 - demo 编写
1 L# M8 f# @) W
- }! R) L8 d  c7 k8 t- V& W* ~) R第11章 ts-axios 更多功能实现【锦上添花】- U/ P& {% h% w* K
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
( Y$ ~& l4 Q5 {" Y5 R11-1 withCredentials 需求分析&代码实现& demo 编写/ p6 O# c( @0 l6 {5 [) b' V4 L* y
11-2 xsrf 防御 - 需求分析4 {2 a, p8 c3 m3 d
11-3 xsrf 防御 - 代码编写( h- G6 |$ H! [1 u. s
11-4 xsrf 防御 - demo 编写8 i2 F$ f' Z7 g
11-5 上传和下载的进度监控 需求分析+ 代码实现
1 v1 D5 G& y/ b) j11-6 上传和下载的进度监控 demo 编写: b6 {, B% F9 y0 a) y+ o6 v
11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写
" r- M# x& c7 X11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
- g. \) E/ E& C11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写
5 L5 g( i# x  L( b0 R* r! C( o+ p11-10 baseURL 需求分析+ 代码编写 + demo编写6 |% J, Z7 H3 c; [
11-11 静态方法扩展 需求分析+ 代码编写 + demo编写
* z/ c! D4 K5 S2 p" U: A, m5 |4 i: D7 _, ?# L
第12章 ts-axios 单元测试【保障代码高质量】
; d5 B  f, Z; F! F1 _先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%. d6 r/ s) [9 I( `' r/ ^' T+ ?( ^
12-1 前言) q) w5 P0 }6 n
12-2 Jest 的安装和配置 Jest 安装
; O9 U4 X4 T5 C$ P12-3 辅助模块单元测试 准备工作
3 {; q, {: H4 |# q) x12-4 辅助模块单元测试 util 模块测试-
. e) G" d  P  x$ Z! c12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试
  G$ \* i; {9 J4 s12-6 辅助模块单元测试 headers 模块测试
/ [3 @5 S# A; h3 |% T12-7 辅助模块单元测试 url 模块测试
& Q" f  I9 k( G% H; Y12-8 请求模块单元测试 jasmine-ajax + 测试代码编写, ^0 R6 C: Z1 ?" c
12-9 header 模块单元测试 测试代码编写
. F6 d# Z2 G& S9 |12-10 Axios 实例模块单元测试 测试代码编写
) Q5 x5 X7 c+ [) w12-11 拦截器模块单元测试 测试代码编写
( c# O! S9 @# C' A12-12 mergeConfig 模块单元测试 测试代码编写
: P% W8 V/ J2 S/ ?9 q0 D12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试, g0 l3 T3 _) X& M% _; _
12-14 剩余模块单元测试 defaults 模块单元测试; J* r% @* v, L/ n" j6 t, {9 d( n
12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试
! h  P/ M) H  P7 z4 w' e12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试
' t3 p, Y/ D9 B4 ]0 o! W! C12-17 剩余模块单元测试 补充未覆盖的代码测试4 i! C; F  D4 d" o6 K
; k+ I# ^0 j3 q# g6 }
第13章 ts-axios 部署发布【向社区分享你的项目】
# H1 d% J4 o; R讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。
5 w3 S+ M( j, ?% h' E13-1 ts-axios 编译与发布 需求分析 + 编译和打包* i) f) P" j# o/ S  z! A7 g# w1 @
13-2 ts-axios 编译与发布 自动化部署( S4 z* K  l7 w2 k4 N, w
13-3 ts-axios 编译与发布 运行部署脚本
- \9 }! V& \( e1 m/ Y4 ~1 ~' g13-4 ts-axios 库 在 TS 和 JS 项目中引用9 b) O1 `6 {1 ^6 a  {
& m: L5 F  ^( e0 B
第14章 课程总结【知识梳理,巩固加深】
1 U) o9 m0 a1 j" [0 L本次课程的整体回顾,总结学习的内容。
+ N9 P4 h2 k- ^: W14-1 课程总结 与回顾
/ w  N, G& ?; s# o  \0 k' V3 u
1 I1 ~2 D; y" r2 X
# ~4 }) y7 _7 A; [〖下载地址〗$ x( p9 b  ~+ J7 T, e6 y
游客,如果您要查看本帖隐藏内容请回复
; D8 R& Y& `% ~  U: l" P4 T4 |( v
/ H0 U0 J0 P4 C0 F  D
2 V0 G. y4 X8 H  n6 Y) I6 z
回复

使用道具 举报

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 b0 n; V5 J4 x  |& `1 o正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则