基于TypeScript从零重构axios

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

7 p1 @9 X$ O* \. x, a 360截图167708098610583.png 5 H% P4 S  P0 a! C
〖课程介绍〗
& ~# G, \" H7 Y6 U( c        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
, P6 m% ]7 A2 g& w0 E9 _, y4 x" E' \$ r8 I1 k3 o
$ f: v) F1 B  ]. A7 {3 B9 t〖课程目录〗. b3 U& S) ]* a0 @0 \. t
第1章 课程介绍【悄悄告诉你,一定要看,有福利】- b3 u$ K1 [3 z* x2 \* h/ K
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。
' D, e: W( M( @! w+ n8 h1-1 课程介绍 试看7 q5 r6 D2 b" P; R. P- ^2 x) I1 V+ V
* D0 w& e, f; N& _/ r/ a" t1 _2 R* c
第2章 初识 Typescript【初次体验】
. B6 Y& K4 Z' ~8 h教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。3 f/ z9 U0 q6 C) Q
2-1 安装 TypeScript
3 ]# Y. y  P/ D0 \) z4 Z3 {7 j2-2 编写第一个 TypeScript 程序 试看6 O$ f9 ?" N# ]" O8 U% ]
5 C* F; I: M" Q) f4 B
第3章 Typescript 类型系统【必备基础,牢固掌握】
9 U# B1 W4 I, Z) E2 a9 e7 S参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。
. X7 _/ C0 I8 X0 `  I$ ]3-1 基础类型(上)) C" i8 [0 a7 T$ {
3-2 基础类型(下)* q8 R( [' W8 r3 }: f. g% B
3-3 基础类型(注意版本报错问题)
# s: L, x& R: u; o2 L0 g/ O3-4 变量声明 - var 声明( _! ~& }7 C" s* G3 H9 S& q* N
3-5 变量声明 - let 声明
( k# y( _4 |) U! b3-6 变量声明 - const 声明
+ L  `$ Y- N0 L- c+ }3-7 变量声明 - 解构
3 z8 A1 k( I) \3-8 变量声明 - 展开/ P) L6 l9 b* F# E) w
3-9 接口 - 接口初探
- D1 E! x: m) O4 W3 w+ Y3-10 接口 - 可选属性+只读属性" `; }% U& c: X! g$ e9 [- u; g
3-11 接口 - 额外属性检查+函数类型+可索引的类型# y0 X; v" \' s+ E  Y' v) u
3-12 接口 -类类型+继承接口+混合类型+接口继承类
6 ?/ Z" V: c6 ]( b3 A2 I3-13 类 - 基本示例+继承9 j, w0 k) q" f0 p8 V: Y3 F) t* `
3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符7 ]- u) n0 u+ J3 f- _& k) b: P
3-15 类 - 存取器+ 静态属性+ Q& }% F3 V. V/ {; Q
3-16 类 - 抽象类+ 高级技巧+ [5 L- {& O7 ?" o1 J$ t
3-17 函数 - 基本示例+ 函数类型
* }* @. L  X6 Q% W3-18 函数 - 可选参数和默认参数
7 W6 ~. {" i9 C" G# o1 E6 P4 @3-19 函数 - this+ 重载0 h. y; c5 u2 O+ `  K4 m2 a
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
& H8 M# |( B9 ]1 I! B& H3-21 泛型 - 泛型类+泛型约束
3 l4 Y  Z! b+ p  w4 _9 t4 p1 G1 ?3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型
  u" w4 k. @! ?, s$ S7 T0 R. O3-23 高级类型 - 交叉类型
1 M. x5 I$ T: V8 \4 _$ V( a0 ~3-24 高级类型 - 联合类型( f1 h' x- {* j/ a
3-25 高级类型 - 类型保护
# F9 c! K+ O) G9 \3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型
/ H9 C6 Y  J( l* y6 x3 ^
: m2 A7 A* p$ C/ k! E3 r3 j第4章 ts-axios 项目构建【工欲善其事必先利其器】
* S6 t: n% o* G8 B4 T分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。+ g: c+ }7 ?$ r8 o3 Y/ M/ j
4-1 需求分析; ?' U% S: R$ O/ `" m, W" i. j8 E: D
4-2 初始化项目 - 创建代码仓库
1 @" u  ]3 ?4 N7 [+ b: `4-3 初始化项目 - TypeScript library starter: C* a/ G0 `7 L
4-4 初始化项目 - 关联远程分支) ~* N3 u+ v2 Z* I) Z8 p
4-5 编写基础请求代码 - 创建入口文件
- h$ l% P9 _; M4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求
8 u6 J: w/ s* e( G4-7 编写基础请求代码 - demo 编写
" @' P: _1 R7 v& S/ X. ?3 \: I/ v' S) h5 m0 L2 I! N8 u
第5章 ts-axios 基础功能实现【核心流程】! X# I( W: }& {* s/ A
实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
+ ^0 B9 ^  l1 N9 s. k- M4 H5-1 处理请求 url 参数 - 需求分析
: L, G# j1 [3 [- _5-2 处理请求 url 参数 - buildURL 函数实现; Z$ z% b1 |5 [( u
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑
' b! m1 O/ j$ A# c  T( k. I5-4 处理请求 url 参数 - demo 编写
! r: l/ U3 @) I3 ?1 Z3 S8 Y5-5 处理请求 body 数据 - 需求分析+ 实现 试看
( j8 v8 o/ P) d: |( f1 w: D5-6 处理请求 header - 需求分析: i' G4 m8 F4 ^
5-7 处理请求 header - processHeaders 函数实现; K" B/ [' `- S& {4 ?) f7 ]% M
5-8 处理请求 header - 实现请求 header 处理逻辑
1 @3 b6 L8 k4 }5-9 处理请求 header - demo 编写
1 E0 ?# [3 S0 y% ]5-10 获取响应数据 - 需求分析+实现5 `. ]  M3 r2 U6 q2 y4 L
5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用
$ }) C  }; E# t4 _5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用3 z  F$ D/ a+ F' G) F8 u) z

/ B; E3 h% m0 V$ ~第6章 ts-axios 异常情况处理【不可忽视的边界条件】
2 F. j+ A, \# x8 R. }% G处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。6 S8 B9 `3 `# ^7 M* D9 k- I) B
6-1 错误处理 - 需求分析' e# F+ X' d; J6 ~9 O
6-2 错误处理- 网络错误+超时错误+非200状态码+demo
1 V, R, K2 q7 @6 ~6-3 错误信息增强 - 需求分析
. c8 g1 T1 S2 X# {6-4 错误信息增强 - 创建 AxiosError 类
( g+ {- C( V  ]$ o# s6-5 错误信息增强 - createError 方法应用+ 导出类型定义! \, V$ z6 z3 H1 L5 h9 E* Q: v0 z

. K3 j' f  h* X+ u0 |( T$ A. [' i第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】
7 g0 C, {4 P4 z/ A7 i# C把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。
* S' A) D: W8 G1 G9 C% L& F4 u7 G7-1 -1 扩展接口 - 需求分析
8 n( C9 m& l( t& o8 w9 N7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类2 z- `2 F  N' h& B
7-3 -3 扩展接口 - 混合对象实现+ demo 编写" d& }+ G9 m6 n% b1 E( J6 `
7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写
0 A& t) z* j: a( ?- u5 J- o7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写! L+ Y7 u1 C! X; H) l6 _5 b+ o, {

' D3 n  U2 s9 _- q. ^第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】
  e. n0 X9 C6 |4 y实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。
. w, m6 D5 b; Q" ^. {0 Y. y8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计
( J* n" k& c. `& c6 @8 {4 L8-2 -2 拦截器的设计与实现 - 拦截器管理类实现) y4 F8 ?# x& r# B7 L6 A) }% `
8-3 -3 拦截器的设计与实现 - 链式调用实现
6 _2 z6 ^! E  f3 c- Q& F; X9 _8-4 -4 拦截器的设计与实现 - demo 编写
  L9 ~7 n6 H. y1 q" S: z4 Y
9 h! R. p" [8 X; C' T第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】
+ _) g; g" R6 D& D$ C- E2 w让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。
* C  ]4 a( a) o) y& i) }9-1 合并配置的设计与实现 - 需求分析 + 默认配置
4 r- x7 }6 K' [6 \+ e2 K* c9-2 合并配置的设计与实现 - 配置合并策略(上), ~% y6 H* S  S
9-3 合并配置的设计与实现 - 配置合并策略(下)
. b) \0 q# Z# [3 h& T- P5 q7 |7 p7 M% h9-4 合并配置的设计与实现 - flatten headers + demo 编写
: Q4 v9 A8 x: n. X8 e6 ]9-5 请求和响应配置化- 需求分析+ 修改默认配置" W( W. V7 W9 w$ a+ R6 h
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写, V5 i2 `1 {, h) u5 M9 a# W
9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现
: K' j" A  z  x% ^; D8 V( |+ M( V( U% D# w5 b. ~3 x1 N
第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】  {6 x* Y8 F6 f' N
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。- @0 d' j0 i" U% W( |' c: a- V1 K
10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
- B+ l# r  n8 P1 `10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口
' `3 E8 z! V) h8 }- a10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现
  u- z$ V& w4 U: [$ T$ Q10-4 -4 取消功能的设计和实现 - demo 编写* n* ~; y" r" N1 W6 `* Z  M

: H8 }( M$ Y( r' H( l第11章 ts-axios 更多功能实现【锦上添花】' b  j; f( F; z! j/ W) }
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。4 N0 s. b6 ^: R% Q8 m
11-1 withCredentials 需求分析&代码实现& demo 编写$ i% C. c. b2 w: i6 @  Q- _
11-2 xsrf 防御 - 需求分析
" `1 H7 A" h3 b' j11-3 xsrf 防御 - 代码编写$ c0 _! M! p8 w2 z6 E; d
11-4 xsrf 防御 - demo 编写
( g; \. x5 r9 e$ u$ r11-5 上传和下载的进度监控 需求分析+ 代码实现
! @  @' v3 x2 X. X1 `7 o11-6 上传和下载的进度监控 demo 编写
* w9 {/ p$ [3 S11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写
+ _& z  Y. I2 f$ _! `11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写7 g( |, N4 X3 b. D$ ^: q3 ?
11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写8 F$ N  N3 U6 q9 D- R
11-10 baseURL 需求分析+ 代码编写 + demo编写- n# E9 a& [" q. F% u
11-11 静态方法扩展 需求分析+ 代码编写 + demo编写
) m5 G# U9 P( e; z
& Z& z) x1 o+ O! B: J第12章 ts-axios 单元测试【保障代码高质量】7 {  c( C5 U" y1 Z
先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%3 x0 O" W% J! E$ G! Y! h" c
12-1 前言
7 n  R6 T# C0 p5 N12-2 Jest 的安装和配置 Jest 安装7 I. h, _3 ^% {
12-3 辅助模块单元测试 准备工作8 B3 o$ f; m& k) u4 H
12-4 辅助模块单元测试 util 模块测试-5 U! G7 k+ `6 [" i: j* L/ Y' |
12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试0 ~  D* l8 ]  S% r
12-6 辅助模块单元测试 headers 模块测试
9 @7 j+ R. `9 h7 O! p12-7 辅助模块单元测试 url 模块测试
! e$ n' o) Z7 C/ t" l9 i5 q12-8 请求模块单元测试 jasmine-ajax + 测试代码编写
! T; Y/ R' c7 w12-9 header 模块单元测试 测试代码编写
1 h7 Q6 n9 B% a12-10 Axios 实例模块单元测试 测试代码编写
$ e2 ?# n. F# ?' p12-11 拦截器模块单元测试 测试代码编写
0 o. x) |& S2 f$ I12-12 mergeConfig 模块单元测试 测试代码编写
  j1 Q2 [; W, n" @12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试
0 e& \% Q- \) R5 x6 \4 o' S) `* r3 S12-14 剩余模块单元测试 defaults 模块单元测试
2 q  R: E) x+ P; ~0 b$ j* J7 t/ j12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试
8 p1 v' A$ M  i12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试$ X3 P" V1 T3 q) n, ]; J
12-17 剩余模块单元测试 补充未覆盖的代码测试
, c9 S& n5 u5 ?# ]3 S, Y9 Z5 R  N: F( |3 D9 W
第13章 ts-axios 部署发布【向社区分享你的项目】
3 P# _( N' j( n讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。1 |9 X6 C7 e2 \) F! M1 I" j- |! d
13-1 ts-axios 编译与发布 需求分析 + 编译和打包' V9 F( t6 r0 O" _+ {/ \3 Q/ u4 R
13-2 ts-axios 编译与发布 自动化部署+ R4 j; W) o9 u/ b5 p7 G0 ^
13-3 ts-axios 编译与发布 运行部署脚本
1 c& E& g# O) G: h13-4 ts-axios 库 在 TS 和 JS 项目中引用- c# X; d- c7 X2 q1 V5 C
$ q: H: h5 a: X5 d% x9 U' p
第14章 课程总结【知识梳理,巩固加深】/ ]5 S! m4 v  [; C8 R1 d4 R: ]
本次课程的整体回顾,总结学习的内容。1 L5 v' A; k3 ^6 F9 i1 C
14-1 课程总结 与回顾
# j) P' O( W- w1 Q. ?/ e2 ?! f3 d) G
* z- ]' |" L; N, v! v$ a! A9 e4 v4 v2 e2 }) h
〖下载地址〗
9 |! r) S" B9 @
游客,如果您要查看本帖隐藏内容请回复
, u3 h  _0 s+ ~( X* K

5 _# \( j  [4 _0 j5 g1 ~3 c% L# ?3 B; K0 B6 F
回复

使用道具 举报

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 | 显示全部楼层
# V7 M* A5 t  M8 q) R1 N# v
正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则