基于TypeScript从零重构axios

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

3 J- L" G1 b+ r' A- z, ? 360截图167708098610583.png   A8 T  v+ {1 m+ i& S7 {
〖课程介绍〗
+ |5 t' L( g* H! G        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
$ [- |8 |6 x" T2 O+ w" C3 w# ], y4 x" E' \$ r8 I1 k3 o
7 h; W' i& G; v〖课程目录〗7 N0 Q- e# \' z8 V( z6 z) `4 _( }0 b
第1章 课程介绍【悄悄告诉你,一定要看,有福利】
; n8 s3 @- N8 e  \  I( B9 D( U介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。/ a' a% h$ [/ Y7 B
1-1 课程介绍 试看* h! W$ C1 t: a- G! h6 m

9 p) D* ^( y4 x* T+ w. a第2章 初识 Typescript【初次体验】
3 t8 S$ [( `7 I1 `% a- \教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。: R8 v9 J7 a. E" W4 X
2-1 安装 TypeScript
- i) J: ?- m% R! A; C2-2 编写第一个 TypeScript 程序 试看% z  \5 v/ I3 f" S$ R

8 }3 {9 f" S! Z+ V5 D; e) i: V% Q第3章 Typescript 类型系统【必备基础,牢固掌握】& k9 q- {7 H! S% b; O
参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。6 V# C9 B% @5 C, a4 M
3-1 基础类型(上)
: G* g1 R- ?0 ~2 e8 R; J3-2 基础类型(下)
( G# n% ^+ r8 ^; K3-3 基础类型(注意版本报错问题), J, m7 q+ w! M. X5 t
3-4 变量声明 - var 声明* D4 o) C- F  S0 n% y, ~
3-5 变量声明 - let 声明
+ z$ B! k& a. E1 o# Q" q: v3 S3-6 变量声明 - const 声明. ^. e& Q; T: ~# N; N
3-7 变量声明 - 解构6 I1 p3 r6 v) _8 D5 M1 K2 F
3-8 变量声明 - 展开
5 h# L# o( B5 H' x# Y3-9 接口 - 接口初探& o6 b* v2 U/ H: R0 R
3-10 接口 - 可选属性+只读属性
+ K) M+ G6 [* f6 g  S3-11 接口 - 额外属性检查+函数类型+可索引的类型4 F1 V( B4 {: M
3-12 接口 -类类型+继承接口+混合类型+接口继承类2 Y- f' U- _* D( z" w
3-13 类 - 基本示例+继承) @+ o2 B5 G" q+ y
3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符
9 u: b7 |4 v, R3-15 类 - 存取器+ 静态属性
2 g8 f  q) l- H8 c# Q3-16 类 - 抽象类+ 高级技巧7 c8 V6 [( S- W# P* D. R% Z3 m6 H. {
3-17 函数 - 基本示例+ 函数类型6 X1 I! m8 d* X/ Y
3-18 函数 - 可选参数和默认参数
8 Y+ J# r' H6 A3-19 函数 - this+ 重载
% a: L( b6 @9 n3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
; L, w# _2 n5 H+ k* x0 u1 \8 S3-21 泛型 - 泛型类+泛型约束
3 `1 Y! ?8 z! ?2 q% q6 D3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型
! w: J* `7 j9 j6 O6 O# P3-23 高级类型 - 交叉类型* w# D: c! X1 p8 T
3-24 高级类型 - 联合类型, j, J6 `, H+ Z3 J, Q
3-25 高级类型 - 类型保护+ b/ m  y( z% N( l
3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型
( h5 c6 x- ~- N' x
: C+ T9 W! E* i第4章 ts-axios 项目构建【工欲善其事必先利其器】! \% e: g; L8 q" n1 y) P
分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。+ Z; [/ B) R" q& p
4-1 需求分析# ^3 I7 g* n( W1 K
4-2 初始化项目 - 创建代码仓库
+ m0 p) l) ]; @& r4-3 初始化项目 - TypeScript library starter
( _% d, d, C, H- E4 R5 F- ?1 F4-4 初始化项目 - 关联远程分支
% j  o: U; r# c% L4-5 编写基础请求代码 - 创建入口文件
& P5 U* j* W# E* c4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求
! _' i$ W9 _* L" F4-7 编写基础请求代码 - demo 编写6 U6 P0 X6 \, l0 H3 C# C
/ u4 y+ O, v1 W$ C
第5章 ts-axios 基础功能实现【核心流程】9 p5 i" Q- Q* i6 K
实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
; l! A) Q  T5 Z- E% L5-1 处理请求 url 参数 - 需求分析7 x7 D7 k$ h" w# Y; z$ n$ u/ |
5-2 处理请求 url 参数 - buildURL 函数实现; C9 `3 n4 @. y: T9 B: G+ a
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑8 @& e- ~( x; ?) X6 @8 o) L0 w
5-4 处理请求 url 参数 - demo 编写' j/ R3 Q9 Z, M+ E
5-5 处理请求 body 数据 - 需求分析+ 实现 试看
3 q% d1 E+ O- J( e! T) I8 y/ W5-6 处理请求 header - 需求分析, T5 h: I( b/ G4 }4 B' m; w  e
5-7 处理请求 header - processHeaders 函数实现0 e8 @; a0 y) \& V6 I
5-8 处理请求 header - 实现请求 header 处理逻辑
: j; L0 Q% z% \1 T5-9 处理请求 header - demo 编写
1 [$ y- r. I; l% ^. ?! N5-10 获取响应数据 - 需求分析+实现
' W4 i- i. j% ]8 y% W5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用& p9 t, c7 F9 l' M. L& b' ~# U
5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用9 e( b/ P$ d2 N& u: v* X! d* Z# x
+ \" K+ R  X# V4 ?( s! k& S
第6章 ts-axios 异常情况处理【不可忽视的边界条件】* }* d9 @7 N8 K! H
处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。8 w% R! p) r, z' D# m) a
6-1 错误处理 - 需求分析2 n9 u0 A: A; M  l! T3 Z
6-2 错误处理- 网络错误+超时错误+非200状态码+demo
4 @* g" ?3 p2 M7 e6-3 错误信息增强 - 需求分析
- m* G5 j8 ]" f: J6-4 错误信息增强 - 创建 AxiosError 类) d' [. P* Z0 C8 d
6-5 错误信息增强 - createError 方法应用+ 导出类型定义
' o2 S) H' N0 F7 ]; D0 h/ Q( U
, `: C+ w9 q/ J  F第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】5 u3 K: r" I3 M/ m4 {$ S) e
把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。: j6 ^  v6 K" `  o  D
7-1 -1 扩展接口 - 需求分析: P: O9 U* t1 ?% E/ l# Y3 W7 P
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类) @0 y; o" }/ _  y% L& y$ U
7-3 -3 扩展接口 - 混合对象实现+ demo 编写
4 P% d9 T1 }% p/ q2 g7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写9 g$ j3 i2 @& v0 f% X4 U5 V
7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写. n: z2 S& A) P7 x1 A! z; E+ V

: p8 s* f; V% G, a第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】
7 @) M" G7 x0 U8 i6 K. k实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。  @3 Z% m6 j( z5 W1 b* k5 V3 d
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计/ A4 W+ J) B! J6 E/ I# W
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现
* K+ U/ N. k7 u. H% N% e8-3 -3 拦截器的设计与实现 - 链式调用实现
: Q. m3 n) l# e( c6 K8-4 -4 拦截器的设计与实现 - demo 编写
# r3 w5 k% v. e9 \  c( Z7 n6 V* x, C( Q$ _- S7 D; Q
第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】; {3 I0 g, j$ l) [8 o
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。" i# U1 _- |" B
9-1 合并配置的设计与实现 - 需求分析 + 默认配置$ Y- D, T6 S5 h( i
9-2 合并配置的设计与实现 - 配置合并策略(上)7 n% X7 x2 R8 i# V" [- D8 \! Z
9-3 合并配置的设计与实现 - 配置合并策略(下)
5 D4 o, o! f2 x# @  Q! r3 |/ t9-4 合并配置的设计与实现 - flatten headers + demo 编写* X/ w& Q4 r/ \8 J& o& f; G0 _2 n
9-5 请求和响应配置化- 需求分析+ 修改默认配置
8 q1 ~% ~- {- f2 x9-6 请求和响应配置化- transform 逻辑重构 + demo 编写* b3 F) n, J  L3 D
9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现
5 I& U8 i: ]6 x
1 |: e& F, c- k: K: f# B. ^第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】
+ ^* Y) s; Y* S$ o. C2 d实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
% w% N: X8 W/ g) `9 k5 |/ D10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
  k+ z: s  @& j: S/ d; j10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口
) W; R/ @5 v4 h1 x; e, B10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现
% \8 k% ^* y0 m+ D10-4 -4 取消功能的设计和实现 - demo 编写
6 `% c6 k- ?8 D3 W3 y3 s
# R4 Z  E; r  ^7 x4 M. j0 h6 T第11章 ts-axios 更多功能实现【锦上添花】4 \4 [/ c: O; q0 n( Y5 Z
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。! g+ j# I$ b3 Q, I( b
11-1 withCredentials 需求分析&代码实现& demo 编写
) Z6 d8 n; f) x' _6 x" H; v11-2 xsrf 防御 - 需求分析
9 {: ?# Z/ ?! U; Y) {; M: ]11-3 xsrf 防御 - 代码编写
4 ], s- O# ~) d: P; ]$ k2 }6 F11-4 xsrf 防御 - demo 编写
9 o8 F. ?) G9 o0 E  j- D0 ^) N' G11-5 上传和下载的进度监控 需求分析+ 代码实现
! X1 U* O3 b+ s$ V& X11-6 上传和下载的进度监控 demo 编写
3 q7 P' s& K' E7 \5 ^3 h  i11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写4 d6 \& \$ ^" {& D" R4 P' p
11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
" p( K! E$ k% b  A# g+ O) ]11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写8 Y" k8 q1 E5 i7 |- @
11-10 baseURL 需求分析+ 代码编写 + demo编写
% x9 y4 Q$ b+ G2 i2 o1 V: W( ^4 p: C0 S11-11 静态方法扩展 需求分析+ 代码编写 + demo编写
2 p/ |3 c. ^7 G4 r4 g  g1 f) U
  E* t9 @1 q1 V+ r3 p" V第12章 ts-axios 单元测试【保障代码高质量】0 P" e2 \) v/ q& W; H4 D$ d! n. o
先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%7 H/ H) L4 D* J7 _/ b, v: h
12-1 前言) z' v0 e7 [& i) F3 e8 w, D
12-2 Jest 的安装和配置 Jest 安装7 @9 _1 l+ T; S
12-3 辅助模块单元测试 准备工作
% }! m& M) S# p7 L" W2 b- F, }6 T12-4 辅助模块单元测试 util 模块测试-
6 Q' ^' C( u& ?" o12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试
  i1 z5 T# `/ H9 k$ h12-6 辅助模块单元测试 headers 模块测试
& X' q7 Z: }2 i  u12-7 辅助模块单元测试 url 模块测试
  H2 c3 N, k. q0 u) E* N12-8 请求模块单元测试 jasmine-ajax + 测试代码编写
. a- y/ @: ]1 l4 y& M0 m12-9 header 模块单元测试 测试代码编写
, r, N" U! U9 \12-10 Axios 实例模块单元测试 测试代码编写
' A" U  S2 l7 e3 j! m+ Y. u! }12-11 拦截器模块单元测试 测试代码编写8 _4 ?+ L  j5 y, p8 a" i9 g/ p" {
12-12 mergeConfig 模块单元测试 测试代码编写
! _3 y1 F: Z3 @  e8 Z3 P8 J12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试
. w2 J% C% S3 t7 \; h12-14 剩余模块单元测试 defaults 模块单元测试
; ]+ C+ H7 J5 C$ i  L( e# L% w12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试' }" f( E) K$ ^! _
12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试$ K  k# G5 d- L7 _
12-17 剩余模块单元测试 补充未覆盖的代码测试3 s8 n( I$ T: G

7 D# P2 D6 \; `& A第13章 ts-axios 部署发布【向社区分享你的项目】0 q( T. s  v4 M: [
讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。
. d! p! l: F/ j. W5 j$ A" [13-1 ts-axios 编译与发布 需求分析 + 编译和打包/ e( b0 A! e8 l5 v) }* g6 R
13-2 ts-axios 编译与发布 自动化部署3 g4 Q- u# X5 ~7 F5 V7 k
13-3 ts-axios 编译与发布 运行部署脚本
. y& f: m- Z# c4 m13-4 ts-axios 库 在 TS 和 JS 项目中引用
# @2 R" ~+ \& T  M! E2 U) G* @& |1 {2 n  f4 R( A
第14章 课程总结【知识梳理,巩固加深】
$ A+ O( W' E) n9 I本次课程的整体回顾,总结学习的内容。
* c3 G8 H0 _5 h9 Q, o: d14-1 课程总结 与回顾# K( M3 g0 g8 O" H
) T% x" R# R0 ?1 u  a. |
, a# L& B3 l/ x; ]* t
〖下载地址〗6 M0 O$ c# s# |
游客,如果您要查看本帖隐藏内容请回复

. k& P; z: ~3 q  O  j; b5 Q: {/ k1 h2 m- m% h/ W
+ z0 d% J: k6 R
回复

使用道具 举报

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 | 显示全部楼层
- G3 u, h2 R) S: |" R' d6 G
正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则