基于TypeScript从零重构axios

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

( {5 @* r! \0 N8 i 360截图167708098610583.png $ w3 S/ S7 y8 u
〖课程介绍〗/ B8 y) ?0 V4 ]. _2 P
        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @& \, C( d( |6 G! q# k
, y4 x" E' \$ r8 I1 k3 o$ G8 M$ M. [, r& _4 [
〖课程目录〗1 M3 D) C- u/ t. a1 J7 {0 u$ s
第1章 课程介绍【悄悄告诉你,一定要看,有福利】5 C: ^1 y) y6 |; t$ h/ ^* b- B
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。
8 `6 w4 S1 c7 M1 T+ l1-1 课程介绍 试看4 F" c; D8 t% o: |; u
( D8 l/ x3 o: p! ~& S
第2章 初识 Typescript【初次体验】7 D! Y7 R6 W  M
教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。( j) D/ V8 q3 ^- b- d
2-1 安装 TypeScript
$ _  b1 J# Q' u: V# T& y6 p/ G0 O$ Q! f2-2 编写第一个 TypeScript 程序 试看, v, L" t0 P6 L* O$ k) A$ e( E
  Z  U- {7 v6 z; I1 A- u$ E7 h
第3章 Typescript 类型系统【必备基础,牢固掌握】
) i+ S5 s3 r& o6 a. m7 t参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。& J  }; J- Q5 [  O" D* c
3-1 基础类型(上)2 g. ~, @- O( p3 p+ o
3-2 基础类型(下)
/ S; N" ]4 T5 {! T; e3-3 基础类型(注意版本报错问题)0 Y7 p3 @5 V7 j6 ]9 {0 W
3-4 变量声明 - var 声明% _1 N$ d# j( o
3-5 变量声明 - let 声明0 Q6 w2 N8 E7 ~# R, g9 g3 N
3-6 变量声明 - const 声明0 G: e1 P" v0 Q% o4 b" c
3-7 变量声明 - 解构9 i9 _/ z/ K4 w& `1 y
3-8 变量声明 - 展开
+ y3 t: d) A% N3-9 接口 - 接口初探2 b; [3 X; J' Z% p5 G. \$ u
3-10 接口 - 可选属性+只读属性
) y2 M3 C' E0 X) ?, L3-11 接口 - 额外属性检查+函数类型+可索引的类型  L- r$ F# Q: u
3-12 接口 -类类型+继承接口+混合类型+接口继承类) U3 r- r/ z) H  V
3-13 类 - 基本示例+继承
. F# P& @+ }3 F, j' v$ \( r3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符' R% _# }! n8 R4 c+ }' ?( H
3-15 类 - 存取器+ 静态属性) h! P* K* L  `- |" l
3-16 类 - 抽象类+ 高级技巧
# v# \1 a! p" ^1 W* K* l" j3-17 函数 - 基本示例+ 函数类型2 ^7 J( s$ H. \) F: e, Q
3-18 函数 - 可选参数和默认参数& g1 B; Y5 q. j: ?2 a2 i/ O$ E
3-19 函数 - this+ 重载: W$ f. q2 J4 A1 J$ k! e( p4 z
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型, [) L& s: k) C$ e4 B
3-21 泛型 - 泛型类+泛型约束
3 d# g; A( o" K6 X. i5 s3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型. C! n1 b+ c, ~- a5 M0 V2 S# G
3-23 高级类型 - 交叉类型% U1 r0 Z: u) G" y- h
3-24 高级类型 - 联合类型, ?* e  G; k4 ~$ ?' o* N) c0 G
3-25 高级类型 - 类型保护
* r# v5 p, b1 G7 c; n3 Z' a3 f: \3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型
. |. l  R5 W) c3 C+ [; ?# |. U$ w# Z: x  q- B4 o' [9 D
第4章 ts-axios 项目构建【工欲善其事必先利其器】: t9 L# W! K/ `; ?
分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。
" q  H* n: X1 {. D) c2 G4-1 需求分析
9 y) {1 \* j; Z4-2 初始化项目 - 创建代码仓库: F9 J6 s6 |8 s# j4 g5 j  i
4-3 初始化项目 - TypeScript library starter1 h( v  G  r# {, W" }
4-4 初始化项目 - 关联远程分支
* \6 y5 Q' X$ N0 r0 T6 \' M) g4-5 编写基础请求代码 - 创建入口文件6 s* \0 W3 u1 |2 }0 W6 z1 C
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求7 _2 b+ q- n. O7 s- F( r
4-7 编写基础请求代码 - demo 编写2 \; o. a+ e# A" W& ?
6 p' H: c# q" J3 }% r* a
第5章 ts-axios 基础功能实现【核心流程】
, s( H* a# g5 X, J( i2 z实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
; R. O$ T% K# ]5-1 处理请求 url 参数 - 需求分析5 M5 c4 j- [! a- C: u
5-2 处理请求 url 参数 - buildURL 函数实现
' f9 K* h5 v' M. u7 N9 N5-3 处理请求 url 参数 - 实现 url 参数处理逻辑
7 G8 Q+ B9 n8 U+ e4 ^, ^5-4 处理请求 url 参数 - demo 编写, E+ U* N  e. _
5-5 处理请求 body 数据 - 需求分析+ 实现 试看
+ P* {8 e" q8 l+ w- n0 x- k5-6 处理请求 header - 需求分析
& {5 k6 m/ b! Z' [5 x- k( A5-7 处理请求 header - processHeaders 函数实现& T* u9 f6 s$ ^* l3 h% `5 Z$ s
5-8 处理请求 header - 实现请求 header 处理逻辑: W% `* ~0 b) c% r) f
5-9 处理请求 header - demo 编写
* Z+ H( f3 q- W- R0 N6 t8 {- x5 R5-10 获取响应数据 - 需求分析+实现! P6 G2 _, `* P. M5 \& D
5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用
; S" n& M+ U+ P2 n2 t5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用! O" ^& ~& x5 O  n4 Q
% R& S) ?8 h8 k, ~
第6章 ts-axios 异常情况处理【不可忽视的边界条件】/ A, k* n: c- |) f+ j" O
处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。
' K& j/ }: H% A* \6-1 错误处理 - 需求分析
9 E6 m% E8 G- W: R9 w+ U( r3 g% \+ \6-2 错误处理- 网络错误+超时错误+非200状态码+demo
' |4 J/ Y+ [% P9 [) c6-3 错误信息增强 - 需求分析
8 @' L$ g+ d5 l- u/ J, H6 ]6-4 错误信息增强 - 创建 AxiosError 类
" ~' L) o* N; I' g  ]" q2 f6-5 错误信息增强 - createError 方法应用+ 导出类型定义
. l, g+ T" m, ]/ R& q
9 K# ?1 J% ]' r  ^- U第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】" @6 W( w4 B$ c7 [6 Y9 c
把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。( N4 Z% g- _5 F0 z) `4 y6 B% Y5 o
7-1 -1 扩展接口 - 需求分析. N: d: M. \' l7 l8 P
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类
0 t0 T+ d2 e% T7 Q* Z' |7-3 -3 扩展接口 - 混合对象实现+ demo 编写
" n' U0 ?4 k4 q7 J5 j7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写1 m! Q4 o6 x9 ~' N" G/ _0 `
7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写% h& t& |) _3 z/ i2 x( [8 o

+ e$ d: a$ t% I. Y( u- c- E' n第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】3 C, j% K% R: C
实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。% W6 ]" I8 h/ ]; G' ], P
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计5 R( M1 O! s$ H1 s4 B; N
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现4 X+ @, A) f4 r- l( Z! q; r. `/ O$ Y
8-3 -3 拦截器的设计与实现 - 链式调用实现2 R# e& ~* d/ S! p1 i
8-4 -4 拦截器的设计与实现 - demo 编写  V/ M) ^2 W9 j" d# `

( P' ]3 E# ^! o2 g! R第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】& C% [' r& c/ s  p1 G3 |
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。
. j# l$ K3 \3 i' T) x; B9-1 合并配置的设计与实现 - 需求分析 + 默认配置
& y. H5 L  u! l8 }/ [9-2 合并配置的设计与实现 - 配置合并策略(上)
$ E% T; Q' k% a$ ?% U6 X# O9-3 合并配置的设计与实现 - 配置合并策略(下)) S1 W/ B0 j5 u9 \1 j
9-4 合并配置的设计与实现 - flatten headers + demo 编写4 M% }  m/ v  y$ V) L1 E: M% Q( d: b
9-5 请求和响应配置化- 需求分析+ 修改默认配置
# e4 e. V" ?  D2 m4 i9-6 请求和响应配置化- transform 逻辑重构 + demo 编写$ q+ r1 I0 \! O
9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现, Q0 D2 b+ T' g% b$ v
0 k, h: ~3 L9 t8 P$ y
第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】/ T; ^# P5 |2 e6 @
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。) C( b4 n! W- Z4 [
10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
0 x. j& Z! P1 U. L  C: @10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口
9 Z* q8 l6 {) m/ B* g& s9 ?8 ?10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现
% s( v/ T4 q: m" G10-4 -4 取消功能的设计和实现 - demo 编写# i+ H0 l' Y# w

" I' Q: M- o: ~$ _* [1 Z! V2 |第11章 ts-axios 更多功能实现【锦上添花】1 A, R+ w% g. K4 ]
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
7 W6 W0 g: ^6 }% N- z/ \11-1 withCredentials 需求分析&代码实现& demo 编写8 N: r2 n( x3 B' L2 v$ I! q
11-2 xsrf 防御 - 需求分析! x; e" v0 D; A9 H. Z2 J+ x- I6 y
11-3 xsrf 防御 - 代码编写
) n* `, o4 q% s1 V+ O11-4 xsrf 防御 - demo 编写+ f; K2 q3 e7 t- a+ r
11-5 上传和下载的进度监控 需求分析+ 代码实现
0 {, O6 y& K4 o: C11-6 上传和下载的进度监控 demo 编写
7 [0 r( }3 p; v. @3 a+ m11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写
2 ]9 e& x' G. U6 J; v6 z7 H: B* k11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
# Z1 K9 t0 H/ g2 j11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写4 W- T  e7 K4 F$ E( W+ a6 o) v% e
11-10 baseURL 需求分析+ 代码编写 + demo编写
3 I$ m. j) ?+ w/ t  m$ |$ t* v11-11 静态方法扩展 需求分析+ 代码编写 + demo编写
# B  n2 g# Y1 P7 @+ o. ~3 Z
* b4 m# k$ ^& @# d  G# C7 D第12章 ts-axios 单元测试【保障代码高质量】
& \4 A. c1 M# C$ `; q先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%
7 M8 |. h  Y% T5 M6 r8 z12-1 前言
+ X- L! l* g: h2 ]3 E0 K4 i# D& c) T12-2 Jest 的安装和配置 Jest 安装
1 J* w; g7 o) A9 g. b12-3 辅助模块单元测试 准备工作
7 T, D* U3 K3 f( |12-4 辅助模块单元测试 util 模块测试-
  A) ?0 N# T* m9 C12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试; D2 I3 ~. T0 E) @! T: E" P
12-6 辅助模块单元测试 headers 模块测试
7 W3 H& s. X- @, x12-7 辅助模块单元测试 url 模块测试+ k" k2 `/ S9 y6 u# y
12-8 请求模块单元测试 jasmine-ajax + 测试代码编写
8 H' z5 J; C6 f  b5 \12-9 header 模块单元测试 测试代码编写8 J9 t- f* s" S2 d! P7 R8 g# `$ v
12-10 Axios 实例模块单元测试 测试代码编写6 s" t* M" ?9 L4 c8 ?# Y
12-11 拦截器模块单元测试 测试代码编写! e$ R* @- h5 n9 U7 P# ^* z1 i* ~
12-12 mergeConfig 模块单元测试 测试代码编写# z: a+ P- n" z5 Z
12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试" q$ l- t* ^9 ?0 D
12-14 剩余模块单元测试 defaults 模块单元测试
4 C8 ]# H. }4 Z7 _12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试; [' F" P# |5 _% A5 d
12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试
; Y  V( W+ w: E, _+ |. n0 d12-17 剩余模块单元测试 补充未覆盖的代码测试
% Q  Z* `# P) U$ c# C
! M0 i/ d( Z% `% I6 i) S/ k) R第13章 ts-axios 部署发布【向社区分享你的项目】
! ^- S+ B, y7 ]9 t& y( W+ z讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。
: m8 c0 K5 ?% g( I13-1 ts-axios 编译与发布 需求分析 + 编译和打包
/ e3 i% q& ?$ y9 z4 T# s8 d* L13-2 ts-axios 编译与发布 自动化部署
9 c7 i5 q8 P2 O. V% ]- m5 e6 ~13-3 ts-axios 编译与发布 运行部署脚本
9 r3 Y( B7 t# i" ~. N& H13-4 ts-axios 库 在 TS 和 JS 项目中引用
2 C- N. j6 _# a9 K
9 ?4 ~0 q; y: Q: z" ~- {第14章 课程总结【知识梳理,巩固加深】! Y8 d3 p- \2 u( m: d
本次课程的整体回顾,总结学习的内容。. ]9 q, F5 K. E
14-1 课程总结 与回顾
. w( _' y  K+ x3 k5 Y) Q' @+ O
' O5 F! N7 N$ ^' L  W: Z
+ t" |* X( I3 Q0 y7 p2 o# X( c〖下载地址〗3 J4 `5 a+ N5 S& c1 l
游客,如果您要查看本帖隐藏内容请回复
1 l+ B# S; m' t6 H; Q' ~% _
: D9 }0 q" r) P9 i; z! m9 v3 A
6 {, y  ]' a/ d. k
回复

使用道具 举报

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 | 显示全部楼层
( J% ~( W5 X0 }
正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则