基于TypeScript从零重构axios

  [复制链接]
查看1779 | 回复12 | 2019-8-14 22:25:04 | 显示全部楼层 |阅读模式
- R' q) w( j7 u6 x* U- V
360截图167708098610583.png
7 i) t0 [( w4 d0 T5 ]& O8 u5 r( d〖课程介绍〗, G8 b5 m1 d, s  D
        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
2 f5 d3 _7 X1 J, y4 x" E' \$ r8 I1 k3 o& y- i( G7 x8 b0 P* ~. ~
〖课程目录〗) ]! M2 O9 f' _. {- O1 x
第1章 课程介绍【悄悄告诉你,一定要看,有福利】& u+ m+ ^7 S. u0 Q: c- x; P: j* o
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。$ u5 c1 H% b. e/ A
1-1 课程介绍 试看) D- R1 ^5 T1 A9 {9 p& ^0 q
7 l( X* M. u8 U( N7 X/ O! ?0 I$ Q; s
第2章 初识 Typescript【初次体验】& X' s8 r3 k/ D5 B2 A" ?* s4 M
教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。
+ `3 P7 W% I+ Q! E- ]0 O' C2 J$ P+ n3 v$ {" p2-1 安装 TypeScript+ d2 X7 m5 d. a+ g
2-2 编写第一个 TypeScript 程序 试看  B( k+ e. a5 I3 Z1 ?; O8 w
, m" f5 B6 X* a7 v
第3章 Typescript 类型系统【必备基础,牢固掌握】
$ Z6 Y- K8 h2 f. l, y7 r参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。& q# P4 S3 A5 C1 n9 m5 d& ^: ~
3-1 基础类型(上)8 }( D3 Q. H5 I. w+ Y9 ?
3-2 基础类型(下)! B% D' i' d% `9 ]
3-3 基础类型(注意版本报错问题)
2 b' @: u" I9 o* q* |5 y3-4 变量声明 - var 声明; Q% z1 X5 I0 W% v2 X3 f
3-5 变量声明 - let 声明2 |2 N# N5 v- @* g
3-6 变量声明 - const 声明
* _3 A& \+ N& w# c3-7 变量声明 - 解构
# U: H+ w; A( k$ D- V! d3-8 变量声明 - 展开
7 F2 q, W/ d) p3-9 接口 - 接口初探
% c( P" }' Y2 K+ G5 \3-10 接口 - 可选属性+只读属性) l/ p0 ~) H" j0 n: V4 q2 M
3-11 接口 - 额外属性检查+函数类型+可索引的类型
# ~3 `9 v# p6 |. E* H3 z! S3-12 接口 -类类型+继承接口+混合类型+接口继承类1 q  @+ c, s6 Q3 Z& N7 @
3-13 类 - 基本示例+继承3 N" u1 J5 M2 @$ [
3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符* d! Z9 m# w  {0 l1 ~
3-15 类 - 存取器+ 静态属性
# r; n/ c! h9 Q- F7 }7 s( ]3-16 类 - 抽象类+ 高级技巧
! G7 n+ N5 D# u  q3-17 函数 - 基本示例+ 函数类型4 h1 j( l& M) A! X0 ]# [
3-18 函数 - 可选参数和默认参数0 B' h1 \& e/ N
3-19 函数 - this+ 重载8 |. c) x# H$ ~, _% l
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
2 W; ~. s4 ?. _+ ]& t" S, n3-21 泛型 - 泛型类+泛型约束$ z& z: u% `% X' E: B/ o( M2 T$ T. m
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型- X1 L# V# g- d# z
3-23 高级类型 - 交叉类型1 n. B; E3 T# A  r3 a2 t8 d
3-24 高级类型 - 联合类型; c* X! ?/ s: Z, E
3-25 高级类型 - 类型保护  ~& J5 W( c2 J" H4 z5 O. c- Y; F
3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型
- E% Q; u/ [& z, Z& X  Q3 b& i! W: U) P1 t
第4章 ts-axios 项目构建【工欲善其事必先利其器】: N, ?" N8 G$ t' s4 ~
分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。/ N+ L# |' V0 ~1 J( M* p
4-1 需求分析% k9 q4 q" ~( j# ?7 O+ m% K
4-2 初始化项目 - 创建代码仓库8 o. p: ~7 g7 f. G
4-3 初始化项目 - TypeScript library starter
# _7 w9 d5 D! w% s9 @4-4 初始化项目 - 关联远程分支2 n( w9 m, y0 I9 q) F1 w# Y9 m. X
4-5 编写基础请求代码 - 创建入口文件- r, i3 G: [" x- m! G
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求. w4 X: v1 r5 b* @  ?7 r( ]. X5 |
4-7 编写基础请求代码 - demo 编写
# P6 ~! v  i5 |7 _
. C' q" n% J# m% C# x第5章 ts-axios 基础功能实现【核心流程】
$ L0 _. D  b' ^2 m实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。& ?+ Y1 S/ A: ~3 d# V; r5 T3 V
5-1 处理请求 url 参数 - 需求分析
+ I' [! ?# c0 M- M, _9 ^* B# ~5-2 处理请求 url 参数 - buildURL 函数实现' O: Y2 i6 L( R: C9 \  @
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑
" |; B, }  ~3 m* Z) ]% Y: x" M. {5-4 处理请求 url 参数 - demo 编写2 f5 N9 i2 l" F2 l7 A( Q
5-5 处理请求 body 数据 - 需求分析+ 实现 试看
4 b# D; C# E4 ^' p, u& u8 X5-6 处理请求 header - 需求分析
5 \$ x' }  I0 W2 |6 E5-7 处理请求 header - processHeaders 函数实现
! e0 B1 n/ A: I6 }$ }/ J% u( Z  t5-8 处理请求 header - 实现请求 header 处理逻辑/ a! c3 {2 A+ h, y/ Y
5-9 处理请求 header - demo 编写" Y9 u: Y% @. O
5-10 获取响应数据 - 需求分析+实现" u" j) r9 s) I
5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用
; m) y9 M2 Z: ^- h5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用
" V# E8 {( ]0 }& p  k& [
! N- g" q0 D0 {' C" P' C8 c第6章 ts-axios 异常情况处理【不可忽视的边界条件】
, I  H% f8 M0 k+ `, q. {, d处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。
0 O2 A) s" F4 B% O4 W4 x+ i6-1 错误处理 - 需求分析0 u  b. ]$ O$ O- Q1 ^
6-2 错误处理- 网络错误+超时错误+非200状态码+demo
9 q) {6 j; G0 p, C6-3 错误信息增强 - 需求分析
8 r9 W! V- P' D5 i4 F6-4 错误信息增强 - 创建 AxiosError 类
5 ~' O9 ?' M, G- r8 G; ]6-5 错误信息增强 - createError 方法应用+ 导出类型定义% [/ `# {+ ?0 w3 J1 b! L: ^
0 ^. J- s& P* f( i2 I7 e6 a
第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】
2 r+ U" S& J! ~! `& `" l% O: J把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。
# k  t; `, e( X$ M* u7-1 -1 扩展接口 - 需求分析
1 n6 _( V. Q" k4 G3 G7 z  s3 ^0 [7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类
6 |* {# J" _& j1 a5 N% Q5 o7-3 -3 扩展接口 - 混合对象实现+ demo 编写
' L3 y4 G6 L7 N7 F4 C* Z' [7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写
. Q/ k2 V3 q: C$ D) v! P% e  F7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写/ i& O% Z# W. J+ g

  Y/ ~6 O9 k, K: L! ]第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】( S1 i/ I; g  S( L5 x
实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。! {& n  |2 J+ {3 i+ e7 ^
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计5 E/ P1 G: F1 l6 K
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现& W  W0 n  {" Q8 s/ \+ P& }4 V
8-3 -3 拦截器的设计与实现 - 链式调用实现* D$ k# e$ D& }2 o: [9 I* y1 W
8-4 -4 拦截器的设计与实现 - demo 编写/ Q+ T6 y  Z8 H% p& C
2 Q( H/ z6 V' P2 @" d9 }. b: b8 `
第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】+ z  T8 l" g' R# O+ i2 D$ b  d
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。
- V0 y  {# b% f7 H  E" _9-1 合并配置的设计与实现 - 需求分析 + 默认配置
1 p: G+ n, x6 A$ R& t9-2 合并配置的设计与实现 - 配置合并策略(上)
( f- g& x3 U: E$ |( t9-3 合并配置的设计与实现 - 配置合并策略(下)
( R  y! [8 L" i3 |9-4 合并配置的设计与实现 - flatten headers + demo 编写
8 C1 @) i) F- U9-5 请求和响应配置化- 需求分析+ 修改默认配置
: O* g8 E) \3 r% S% @7 c! c9-6 请求和响应配置化- transform 逻辑重构 + demo 编写; w6 P( v9 @% V$ V9 m4 `6 ~: v: `5 P
9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现
5 B6 B. v0 M( J+ v6 w3 U$ b/ x5 V2 E& Z5 M" ~
第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】" o; N3 y$ O- ~* d
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。2 t$ B* `) P% W* d0 p
10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案2 p$ f8 I! o3 \
10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口* d8 y3 Q% g' D- L, y& R" Q3 r0 f
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现: C! n0 n) s- @6 C8 H* M
10-4 -4 取消功能的设计和实现 - demo 编写
0 }: Y) e# \/ [% D( T( @6 s1 q
; G8 m4 P: _# c; C( c6 E% L& v8 i第11章 ts-axios 更多功能实现【锦上添花】
2 k" x; d& g8 O. L9 M) O实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
* y! I( r0 |6 @: e. C* b11-1 withCredentials 需求分析&代码实现& demo 编写
- y& z: V  S5 S11-2 xsrf 防御 - 需求分析, A; z' Y' o8 A# V
11-3 xsrf 防御 - 代码编写
/ L, U% \) q" X8 y! j# s11-4 xsrf 防御 - demo 编写
& }4 @" S! M/ x: o) j# I11-5 上传和下载的进度监控 需求分析+ 代码实现
1 L: f& x# n+ _' l  l+ m11-6 上传和下载的进度监控 demo 编写( d& H+ U, Q) {
11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写
. i. h3 m- U1 a/ O# {8 @& N  r) q0 H11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
6 x$ s, j, ?* ]  ^) ~$ P% T11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写
( T% ?" @( _) g11-10 baseURL 需求分析+ 代码编写 + demo编写
' u+ X. s, Y  y- o' r11-11 静态方法扩展 需求分析+ 代码编写 + demo编写: b) I7 d8 o5 v  ]

& S* f9 e+ t! a+ z! _! F第12章 ts-axios 单元测试【保障代码高质量】
" U& n- a4 {3 u1 k) N5 I先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%5 ^" F, t( u8 g7 t' O, T. Y; r
12-1 前言  j2 o" t  q3 N% i) P
12-2 Jest 的安装和配置 Jest 安装, P* E( H4 k9 ]* N; C" x
12-3 辅助模块单元测试 准备工作$ j" ?- M: o3 C* u, L3 v" h
12-4 辅助模块单元测试 util 模块测试-  T+ l5 \7 [+ w5 `* r) c  {
12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试1 Y/ \6 h" b3 }; J/ p) S
12-6 辅助模块单元测试 headers 模块测试
- K% m% y# I. c) C& X5 y$ g12-7 辅助模块单元测试 url 模块测试
" I. g8 H2 ?$ [, P  y. ]12-8 请求模块单元测试 jasmine-ajax + 测试代码编写
9 }$ {' [. R5 o  @2 |12-9 header 模块单元测试 测试代码编写: {6 }  Z0 c. q
12-10 Axios 实例模块单元测试 测试代码编写
9 z" w* J  f& e& d12-11 拦截器模块单元测试 测试代码编写
+ J7 Y. A0 t. G! I( a$ {. [5 }12-12 mergeConfig 模块单元测试 测试代码编写
; v& O0 w! {8 i% O7 y! c  Q12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试6 u5 q4 t3 u2 W& i/ z( j7 F2 H
12-14 剩余模块单元测试 defaults 模块单元测试
0 _, J' f# Y  a+ _: f  Z0 K2 @12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试
; v0 K5 i0 A. o6 J) }% L0 e, R12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试) e& s9 Q  b( ]
12-17 剩余模块单元测试 补充未覆盖的代码测试: r) n$ i9 L7 l( {4 U
* s: P5 B9 L* `' {% X, b2 s
第13章 ts-axios 部署发布【向社区分享你的项目】
/ V* Y9 s2 v0 _: S6 m2 ~: ?" c讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。
6 K' W1 D9 t0 o0 G' @: Z13-1 ts-axios 编译与发布 需求分析 + 编译和打包8 J0 U, |1 x1 f3 b/ ]; k
13-2 ts-axios 编译与发布 自动化部署. i! e+ m+ h, u: A) c$ j- s
13-3 ts-axios 编译与发布 运行部署脚本8 P3 f# }( }# [& ~
13-4 ts-axios 库 在 TS 和 JS 项目中引用  J: d) M) [2 h' R
% A" K: F/ X9 s9 {' a
第14章 课程总结【知识梳理,巩固加深】
/ p2 M- y3 H: O! e8 d# M4 _5 y' B8 U本次课程的整体回顾,总结学习的内容。: F5 z' _( o# O2 _
14-1 课程总结 与回顾
. a( w$ D8 S9 L
! X+ n+ e8 z3 }# L* O  y: Q
9 O5 w& C$ T& y〖下载地址〗
$ I5 W0 c& U. N; b' |. S2 v* A; O
游客,如果您要查看本帖隐藏内容请回复
+ S3 x$ ]7 H( k1 D1 e; J4 t
5 v# Y5 ]8 l( o) l
% _+ R4 I7 Z; M) r9 T
回复

使用道具 举报

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 | 显示全部楼层
: |/ g% Z2 }& W  j
正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则