基于TypeScript从零重构axios

  [复制链接]
查看3027 | 回复12 | 2019-8-14 22:25:04 | 显示全部楼层 |阅读模式
: Y8 Z( `; t6 q: m: G* ?: X4 ]) ]
360截图167708098610583.png
' z$ M1 t$ @1 t: b0 H) Z〖课程介绍〗9 K6 }  d2 _* y; S# i
        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
' [. o& d' I  ^, y4 x" E' \$ r8 I1 k3 o" ~0 o) P& B- \" _% W  p! ^
〖课程目录〗1 h  J' P- D# k$ F
第1章 课程介绍【悄悄告诉你,一定要看,有福利】
3 X- R% K! I: p& q介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。
6 V+ I  b$ h7 H3 C1-1 课程介绍 试看
8 Q7 a9 ]7 a0 p8 [. v, A5 N7 ?1 |1 ]+ I- Q
  ^1 B( x0 S  J/ s* o3 y1 u& {第2章 初识 Typescript【初次体验】
9 w  K: S5 G* }, e! `* ^- U教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。2 e8 p* v9 q" u* M, J/ V, t! D
2-1 安装 TypeScript
: z, T9 c2 ~9 W0 b- T# u2-2 编写第一个 TypeScript 程序 试看% l& k# n" e3 {: p! R  r2 M* d
) U* t+ u/ D* A% Z% Y
第3章 Typescript 类型系统【必备基础,牢固掌握】
- M: P5 C+ }9 f' H! U, |, ^参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。
* |  D  l! o/ \0 F) \" u) Y" F6 }3-1 基础类型(上)) A5 m( j2 v) X3 ]' r# f$ p
3-2 基础类型(下)
% K0 P9 V' h' ~. [9 F* w0 U8 s+ H9 ~3-3 基础类型(注意版本报错问题)
5 r2 t5 g/ m' z0 D3 W1 l3-4 变量声明 - var 声明
3 W: x) d' l" ~' L) t3-5 变量声明 - let 声明- n/ d, c* o0 p1 |* i
3-6 变量声明 - const 声明
# G) S) R2 E6 a7 [  K3-7 变量声明 - 解构; S# o5 q& n  J+ a7 f
3-8 变量声明 - 展开7 q1 ]. L  l2 r4 U# i
3-9 接口 - 接口初探* c  O% a: |9 {( R! l
3-10 接口 - 可选属性+只读属性$ I3 b* a. U8 f( n! Q  |( c* ]) Q: ~
3-11 接口 - 额外属性检查+函数类型+可索引的类型
; [7 ~4 ]4 s( v9 w; r3-12 接口 -类类型+继承接口+混合类型+接口继承类
+ }! A1 o% S6 E( E7 L4 |3-13 类 - 基本示例+继承
1 ~) x$ N% V+ ?  a9 g' U3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符- `" a2 e8 U( Q2 b9 Y6 [. f: C
3-15 类 - 存取器+ 静态属性+ m+ ?* P) S6 M% a
3-16 类 - 抽象类+ 高级技巧, D! \' ?+ v( o& Q
3-17 函数 - 基本示例+ 函数类型
, w" v0 b6 @3 M7 l6 ?3-18 函数 - 可选参数和默认参数
2 g# Z6 p5 i- Q0 X8 S8 t3-19 函数 - this+ 重载5 W1 s5 u9 M# b9 y/ {$ v7 C
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
2 z! z" F3 O3 F- [3-21 泛型 - 泛型类+泛型约束' P- ^; ~$ I/ f/ K4 j  V$ `" q
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型  s  s$ w3 s3 I1 L
3-23 高级类型 - 交叉类型
  O# ~8 H+ B+ |& U% ?& I3-24 高级类型 - 联合类型; i  O8 C0 F1 T- A
3-25 高级类型 - 类型保护! V9 i$ C8 f1 S4 b7 n; ~$ G
3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型
! Y. N) @& |  y7 p9 Y* {! T! M0 ]3 ?1 i# w9 e
第4章 ts-axios 项目构建【工欲善其事必先利其器】1 y9 b! a) }# h4 ^0 x* ^. R- B% r
分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。
( C! f+ u- G/ m+ p1 v  i( k4-1 需求分析
" s( g* y7 r9 }! U6 z/ ^) n; n+ S' }4-2 初始化项目 - 创建代码仓库
0 D! [6 X- O0 m  o+ |- |+ ?/ u4-3 初始化项目 - TypeScript library starter: d0 W/ ?8 Q2 D% I
4-4 初始化项目 - 关联远程分支
% F% u, r/ K# R9 a) J4 X4-5 编写基础请求代码 - 创建入口文件/ M" C( y! l6 Q. ]& E
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求+ d! i# T* W* I  @* l- @
4-7 编写基础请求代码 - demo 编写- o+ Q9 P3 ~4 c6 Y, C: o
% i, a4 H7 d3 B, V  E% t
第5章 ts-axios 基础功能实现【核心流程】
; x2 L( O# X+ Z7 W8 M+ ^. s  o& B实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
" ~# Z4 r' {8 I$ Q8 {5-1 处理请求 url 参数 - 需求分析
* w- v& M% i" m7 m3 ?$ m$ r- B$ S  T4 L5-2 处理请求 url 参数 - buildURL 函数实现
5 Y4 S5 p: V/ f1 l/ [: x5-3 处理请求 url 参数 - 实现 url 参数处理逻辑
% i1 k" M  u0 ^+ ?1 D4 u5-4 处理请求 url 参数 - demo 编写
3 s4 J1 d* c' s" q" f" K5-5 处理请求 body 数据 - 需求分析+ 实现 试看2 L4 u/ H3 C( r! F/ k. o/ Z% c4 q  u
5-6 处理请求 header - 需求分析# B  I2 O! H0 G1 @. |: ^
5-7 处理请求 header - processHeaders 函数实现
" ^  g9 f" Y( J2 U/ ?" R# r5-8 处理请求 header - 实现请求 header 处理逻辑0 G9 O* q+ P' P0 I& o1 p  F
5-9 处理请求 header - demo 编写- |0 o& }1 J) E+ n% ~4 ^8 x0 E( N
5-10 获取响应数据 - 需求分析+实现7 D' R6 ^6 }" n. u$ u- A
5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用
/ L* \; l4 I3 d5 P5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用, X% }( \( E: V1 `
: ~% x% E( m; M3 a3 k' e3 `3 a8 |
第6章 ts-axios 异常情况处理【不可忽视的边界条件】
; W7 @# {* p- j: n处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。/ Z. O" f& h5 l8 j( c% R
6-1 错误处理 - 需求分析. R) D, i* p  m+ J
6-2 错误处理- 网络错误+超时错误+非200状态码+demo2 |+ |( q8 y. O2 W8 M) n
6-3 错误信息增强 - 需求分析
: y* n' s# ^) S$ P6-4 错误信息增强 - 创建 AxiosError 类
6 x4 _/ I; k: K2 c6-5 错误信息增强 - createError 方法应用+ 导出类型定义
% K: r  h; y$ D. u1 f3 m0 q. G
2 l$ f3 M2 P3 e, C! g) n第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】
8 _. V6 A, s& z$ s把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。
( j* ^( c# U+ L7 \7-1 -1 扩展接口 - 需求分析( ]* t- {  H: e0 x  c# u& F2 L
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类
: \( E2 z/ c9 V) g* O9 ~' u7 w7-3 -3 扩展接口 - 混合对象实现+ demo 编写
# Y8 }) W- }$ y5 Y7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写
% D- L/ e7 b. p: ^' P; C" ]0 q7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写
; {4 J' _  u4 f) o; b# c" U! [9 p1 I! h+ V
第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】) t7 @: P6 M2 d. s* A1 F# \) ^: C( L3 d
实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。) Q6 [! Y  x& q, j) r3 l
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计6 E! W' P$ d  |! a& s3 A$ a
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现- k5 H$ U3 ?2 I5 ]* y& o
8-3 -3 拦截器的设计与实现 - 链式调用实现
' R( V' E# f9 `/ h! K' r8-4 -4 拦截器的设计与实现 - demo 编写8 }* E* }$ |; q* {" D( _9 a

0 w  J5 F$ \; s第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】( k" e& w. ^* ]% m
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。' y/ d6 e6 ]) t6 g1 F  L
9-1 合并配置的设计与实现 - 需求分析 + 默认配置
% h, K- u9 n/ }  B9-2 合并配置的设计与实现 - 配置合并策略(上)
  O% F" k7 T! Q- \" d+ [: l9-3 合并配置的设计与实现 - 配置合并策略(下)
4 G3 w8 F  z' B: \: x5 v9-4 合并配置的设计与实现 - flatten headers + demo 编写
3 T0 N4 _& A5 n& h+ O; Q9-5 请求和响应配置化- 需求分析+ 修改默认配置
( K5 V$ w# t& c* z6 f6 u3 i9-6 请求和响应配置化- transform 逻辑重构 + demo 编写
0 v+ A; G6 [1 O# }* U$ }! Y# |5 X9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现  m& _! H# F4 z
" L! W8 X# t2 Q0 E
第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】6 v4 H+ m0 J( Q' x! S
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
! s( ^# v" c1 l2 e- J5 G7 a10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
" ~+ [& U5 E" A4 \10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口) q( x4 g9 Y* X
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现
" ?- \* E5 W: O6 ~; G6 }. h10-4 -4 取消功能的设计和实现 - demo 编写3 }8 v, N2 `# F; V) d# V2 _

. Y- |6 R  p5 D% v/ [! a" ~第11章 ts-axios 更多功能实现【锦上添花】" c) R- V: H  d% x! z+ I
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
# y9 }& ~0 l% q1 h: f11-1 withCredentials 需求分析&代码实现& demo 编写/ m% C$ e' |6 X8 S6 v
11-2 xsrf 防御 - 需求分析6 J5 K1 _' E! u* d7 T
11-3 xsrf 防御 - 代码编写
+ \3 t- q9 m4 b' _11-4 xsrf 防御 - demo 编写* z. j5 V. W0 O/ v+ F& `' L: h
11-5 上传和下载的进度监控 需求分析+ 代码实现
7 z$ M: d) M0 }3 \11-6 上传和下载的进度监控 demo 编写
0 A& U) C! f3 z5 j! Z2 P( }% B11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写7 U# N$ ^* F, P  U2 x
11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写: i7 \" R1 M+ @( k0 R
11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写( h( D' M" Z( m; h/ T, h6 k- @$ ^" x
11-10 baseURL 需求分析+ 代码编写 + demo编写: P. h: I) \3 f* j7 e0 Z
11-11 静态方法扩展 需求分析+ 代码编写 + demo编写
- w( p+ [$ V6 R" P
( H! Y) E6 B; T# y$ P2 E第12章 ts-axios 单元测试【保障代码高质量】) u  X4 U6 c1 I6 b! |$ v
先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%3 y9 C, P9 a. X5 j
12-1 前言: E2 A( ]2 ]. u/ `/ I
12-2 Jest 的安装和配置 Jest 安装( E7 W* M9 C% r) F( ~+ p- P
12-3 辅助模块单元测试 准备工作
2 Z$ E+ I; L/ T; K; }* ]12-4 辅助模块单元测试 util 模块测试-3 f8 d5 M5 {) D& g& S* u
12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试
" |6 M; P$ [/ L) O12-6 辅助模块单元测试 headers 模块测试8 H4 t. `3 d* f1 s! [
12-7 辅助模块单元测试 url 模块测试. K, w+ s' q2 M" Z) u5 h* A
12-8 请求模块单元测试 jasmine-ajax + 测试代码编写, V2 }! O$ k0 s) `; O4 H, E' [
12-9 header 模块单元测试 测试代码编写# U  A' S8 F7 {8 S" g
12-10 Axios 实例模块单元测试 测试代码编写
- Z+ r! |' _) R12-11 拦截器模块单元测试 测试代码编写
& |5 b- p# I# O( A12-12 mergeConfig 模块单元测试 测试代码编写
+ L9 ]6 f: l1 R, F" l! B12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试6 Y5 M* `$ x, z
12-14 剩余模块单元测试 defaults 模块单元测试. A% i5 m% l/ z% s( O& ^
12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试
: S% t1 L% t7 i3 y' s1 c  p12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试
7 S: }" Z' o1 @; h5 |! p' |8 u12-17 剩余模块单元测试 补充未覆盖的代码测试
7 b4 _& |. G4 |8 e: t0 o0 |* k0 L
第13章 ts-axios 部署发布【向社区分享你的项目】/ h; F. V. h5 {" J
讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。6 R/ j2 X9 l* F( S; w
13-1 ts-axios 编译与发布 需求分析 + 编译和打包
5 m& N+ q, a! s" O13-2 ts-axios 编译与发布 自动化部署+ T) d* D( a5 L2 ~9 `- g
13-3 ts-axios 编译与发布 运行部署脚本& v, n  B" A, K2 a9 [8 l1 @+ u8 w
13-4 ts-axios 库 在 TS 和 JS 项目中引用4 p0 s5 T4 o+ _0 {4 b

% l( O" Z( v3 ?  ?第14章 课程总结【知识梳理,巩固加深】
, ~, a$ |3 \" Q0 u4 I6 z本次课程的整体回顾,总结学习的内容。
: u1 X/ @, J( D" ?! t5 v4 q# n14-1 课程总结 与回顾
6 j9 `" R$ n7 O& h0 g. d- i( d0 k' n. r) ~; H- H3 S! g) |9 m

) C, Q. e' a. S; }  _- g〖下载地址〗3 `; J" c" H/ l
游客,如果您要查看本帖隐藏内容请回复

& h3 r- A( D3 X2 x* v) l, q3 {$ C& A' m
0 n9 o+ K9 g$ }8 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 F+ z# p: f! Z4 u, R6 Q4 D正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则