基于TypeScript从零重构axios

  [复制链接]
查看5671 | 回复12 | 2019-8-14 22:25:04 | 显示全部楼层 |阅读模式
: L% b+ {  s/ I2 j8 y
360截图167708098610583.png
7 H+ f6 ?! `  [8 ?) J  R〖课程介绍〗
) S: J5 `' |7 k; H1 h6 N* x' s8 p        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @; P/ O: |: d  I6 j* I
, y4 x" E' \$ r8 I1 k3 o
( i/ I6 y* H* @6 }0 T* W〖课程目录〗; X" w, ^5 v8 ?0 D7 S( C
第1章 课程介绍【悄悄告诉你,一定要看,有福利】
2 ]( V6 J7 R# O介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。
# J/ W$ p4 z: M0 n. B+ h$ v: J+ K1-1 课程介绍 试看% q0 E/ |. P& R: k
5 u' J& x) v  P' F' @
第2章 初识 Typescript【初次体验】
6 {3 r5 h" Q+ e, t教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。
  F0 R& G' E# s0 U2-1 安装 TypeScript2 }8 h. i; U( G; C+ W4 G# |
2-2 编写第一个 TypeScript 程序 试看5 h& F: P3 C( t% l) ?& G  {3 f

9 M; l0 C1 |+ T5 ^7 ?- R第3章 Typescript 类型系统【必备基础,牢固掌握】
: t, p) j( V4 m" h# n" ?% K% g! u参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。
. |/ z  L+ b0 |  _% k3-1 基础类型(上)
( a3 O. t  W) a' e2 L3-2 基础类型(下)
$ j3 q1 k- c9 h4 ?  W3-3 基础类型(注意版本报错问题)# t. \' v2 }7 r0 v" U) c
3-4 变量声明 - var 声明
3 \3 ?" `6 ?$ u2 M) V0 @# m9 a8 ^3-5 变量声明 - let 声明
$ F$ s; L0 K) v$ S3-6 变量声明 - const 声明/ h4 Q* o: h9 d' I" T: {" }
3-7 变量声明 - 解构0 u* b  H, ]/ L1 r+ u- V
3-8 变量声明 - 展开
& Y6 K4 Y/ H8 f, G7 Q, `3-9 接口 - 接口初探0 [% Q5 I6 V5 l) A
3-10 接口 - 可选属性+只读属性% ^2 H1 f# b. O' S& O
3-11 接口 - 额外属性检查+函数类型+可索引的类型& B; O& V; h2 M! D8 \8 h# M0 [
3-12 接口 -类类型+继承接口+混合类型+接口继承类
+ r4 E% x9 D: R* f: a, E; ?3-13 类 - 基本示例+继承3 ]) T, v# i7 s2 Y7 m) r, x
3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符
& t/ p$ u4 v4 k6 O$ B9 B3-15 类 - 存取器+ 静态属性! W0 _# e& G7 b, \% z- R* Z( b
3-16 类 - 抽象类+ 高级技巧
2 K% j' `- H3 E- m, o3-17 函数 - 基本示例+ 函数类型# t: }0 j" r6 W; I9 [/ x
3-18 函数 - 可选参数和默认参数
0 l2 u0 k5 s- X6 B" a3-19 函数 - this+ 重载
+ S5 [1 ?1 Q0 c9 _! v' a3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型, V8 y7 f  O; w$ P" W. ?" `; b' K
3-21 泛型 - 泛型类+泛型约束' t5 O; \9 l8 t" U- i, z
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型
7 g  n, M7 F$ |! ~1 Q, m+ b3-23 高级类型 - 交叉类型
( U+ E1 |4 ?0 ]; p  U3-24 高级类型 - 联合类型
( _2 a; W' N# {) X3 A3-25 高级类型 - 类型保护
/ Q! k. s5 [3 j- s! N3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型% ^3 y! n/ t- p) A8 |0 }

( P2 g1 @& v9 {" J, E+ l) S! z第4章 ts-axios 项目构建【工欲善其事必先利其器】
8 A- ^+ K# I8 _5 a1 k) X4 F分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。
+ F4 o( p$ E# b" `& p. Y4-1 需求分析
9 T) ]( I& [" Y8 O4-2 初始化项目 - 创建代码仓库: ~1 d0 D" e/ c8 b8 G( G
4-3 初始化项目 - TypeScript library starter) W/ [1 m* n; G, I7 j% n9 \
4-4 初始化项目 - 关联远程分支' f" s# ~# U& k9 C, i5 v1 X1 F" D# h
4-5 编写基础请求代码 - 创建入口文件/ Q7 @( q% U/ m: S0 W
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求: p5 S9 a5 J" s' `9 ]
4-7 编写基础请求代码 - demo 编写7 d. U# `( G. e& G" u7 R; H$ T

. x5 K: A% {" g5 `& p: y, I6 b第5章 ts-axios 基础功能实现【核心流程】3 D' a' E* j$ P8 ~2 M
实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
  n! m: |7 ?" p! ^3 m* s, o5 h5-1 处理请求 url 参数 - 需求分析. f) a' `. U3 Q& f) w+ O
5-2 处理请求 url 参数 - buildURL 函数实现) |2 t6 T- F: R& F$ @
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑
  }) ^. c' y" \5-4 处理请求 url 参数 - demo 编写
' o7 k1 f+ E. _1 H5-5 处理请求 body 数据 - 需求分析+ 实现 试看
' s/ t7 f& Q4 u2 l+ W5-6 处理请求 header - 需求分析
+ {0 X8 J: Z( a1 J$ S2 y5-7 处理请求 header - processHeaders 函数实现
+ u/ a/ }; i- n  l7 n( N2 b" K5-8 处理请求 header - 实现请求 header 处理逻辑7 c+ |6 G; B' x' ~3 F9 Q
5-9 处理请求 header - demo 编写/ w: f4 f  I6 Z
5-10 获取响应数据 - 需求分析+实现3 R) Z( ^0 B( c) b8 u. {# l; K( J
5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用
. _8 e( k1 x+ B& E& R5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用
; `5 m4 a7 D9 H* {. k- d7 Q4 p/ X6 |
第6章 ts-axios 异常情况处理【不可忽视的边界条件】
6 {2 V. p9 |3 n  ^5 U5 d! A7 X处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。
0 s4 l- e, R5 z# f  ^  l% C- S6-1 错误处理 - 需求分析
: V" a1 C4 ~/ ?; d( s& o6-2 错误处理- 网络错误+超时错误+非200状态码+demo
6 `, N8 ^& D9 V# a0 F1 b6-3 错误信息增强 - 需求分析) g  c- X5 i+ ?# e# X5 R
6-4 错误信息增强 - 创建 AxiosError 类5 Z! w. B$ G5 P: B
6-5 错误信息增强 - createError 方法应用+ 导出类型定义
8 X' c5 t7 v+ c! h' P  T
* {! ^' ^0 |* [' P第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】
2 q% a2 n1 b& f2 y9 P把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。
2 D/ g: A6 c) d0 }8 j3 D7-1 -1 扩展接口 - 需求分析' q) ?0 A+ A! o& R
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类' H; S: X& h+ w$ b
7-3 -3 扩展接口 - 混合对象实现+ demo 编写
: A' \6 g0 y7 [; p) O& I' n7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写: \6 {8 ~9 _3 X/ M* e
7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写: V# P3 C. e9 L/ A

/ D9 g7 Y: s3 z" B* V$ S# s第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】
2 ?; S. w! d& @7 [实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。  T0 S, i' E; s) D1 T- E. W1 Z
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计$ W7 h' F" ~* x  d$ i
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现! A. w7 l6 ^  u6 q
8-3 -3 拦截器的设计与实现 - 链式调用实现; C5 |- I9 \% v( r
8-4 -4 拦截器的设计与实现 - demo 编写
! C4 c( t* A) i3 I: w8 J9 ]8 w+ W
8 h  t& V* d- o+ y0 U7 S第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】# V  l4 }: ]9 o8 q& K
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。  T7 I& M8 _* }6 _$ N/ s2 u" Z! b
9-1 合并配置的设计与实现 - 需求分析 + 默认配置
, k0 g7 k8 F! ^6 u9-2 合并配置的设计与实现 - 配置合并策略(上)* ]& ?  w" ^4 E5 Z8 S3 H4 Y' A- V' f
9-3 合并配置的设计与实现 - 配置合并策略(下)
# A/ L3 o! s, G2 W' ^( s9-4 合并配置的设计与实现 - flatten headers + demo 编写
0 P1 I9 L" B5 F- @% m, c, L) L9-5 请求和响应配置化- 需求分析+ 修改默认配置' b& C) z, {0 K* m; ~$ n
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写
4 j, v: c* h$ ?4 j( U' Z9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现
/ f; e; w/ o5 X0 W
4 V* G9 N0 m6 o第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】# Q. p6 w9 D9 v# }3 H5 P$ X
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
+ F# u7 U% y. f* r8 v10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
& h, ~9 w' J+ b& C) y' J2 j, X10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口
% u. v8 d' \5 M8 k# W% U+ @10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现$ M/ v; P, A4 x- s! F; {9 `0 \
10-4 -4 取消功能的设计和实现 - demo 编写
. d/ X# ?. r7 e+ \3 L
: _- _; c. l9 D  E$ J第11章 ts-axios 更多功能实现【锦上添花】
% d$ ^9 l% ]% y, M实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
) C3 l7 y5 u* G# r' S$ M11-1 withCredentials 需求分析&代码实现& demo 编写0 u8 {8 o- S+ ~' S
11-2 xsrf 防御 - 需求分析( v( @/ I: C9 Z+ e2 q2 Q/ ?$ [; b1 B
11-3 xsrf 防御 - 代码编写
* O# j, `  n! I( B11-4 xsrf 防御 - demo 编写
) }2 d  _$ a# S% F2 Q& M; ^# k  h* x11-5 上传和下载的进度监控 需求分析+ 代码实现4 w7 [  y3 O! v: l
11-6 上传和下载的进度监控 demo 编写
7 \. g/ k5 X( \1 q% h' B4 t. b11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写# B" D% a" H* g7 \
11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
9 Q+ i6 q$ E! P( _3 l; ^11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写
) D6 g! |( f5 A0 |! ~11-10 baseURL 需求分析+ 代码编写 + demo编写
, n5 o4 M' R) W+ t% r11-11 静态方法扩展 需求分析+ 代码编写 + demo编写
% [2 b7 s1 a' G3 {$ F, n" _# |; l4 Y& e2 U: o
第12章 ts-axios 单元测试【保障代码高质量】
! O) Q5 [4 M3 c5 X+ E6 o先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%
) A# t+ n' Y. a12-1 前言4 G  E) f/ q% ~3 @9 \
12-2 Jest 的安装和配置 Jest 安装- A9 y- w' j7 c8 C( R: a0 K# Q
12-3 辅助模块单元测试 准备工作
7 T+ O5 ^8 l$ g12-4 辅助模块单元测试 util 模块测试-
# U- j( L. \/ b12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试
) v, X* G+ u/ J" e# g) _12-6 辅助模块单元测试 headers 模块测试/ T, T! V) e. r7 m) U7 p
12-7 辅助模块单元测试 url 模块测试
5 U( n/ _0 P/ F# E" Q! D6 {12-8 请求模块单元测试 jasmine-ajax + 测试代码编写
0 W; B! y# [& \) d( p! J12-9 header 模块单元测试 测试代码编写
# S) z3 H6 v# k9 F12-10 Axios 实例模块单元测试 测试代码编写
0 M" u) P8 x+ ?1 n  F' \12-11 拦截器模块单元测试 测试代码编写/ P, `' _7 ~+ F8 w; ]) h
12-12 mergeConfig 模块单元测试 测试代码编写/ z; B- A, V5 ^  f9 f
12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试
/ w8 J4 g# x0 V- T- j12-14 剩余模块单元测试 defaults 模块单元测试
+ z, m& L8 X7 d0 n8 E% ^/ s; p12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试
3 p; X9 H5 C3 i/ r  i- Q12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试
6 f9 g' J8 V4 C2 f  n. j5 H7 j6 y12-17 剩余模块单元测试 补充未覆盖的代码测试
3 z/ w1 l2 e5 i8 h8 G  ?
1 ?% |6 r! N2 P  d( |5 N( Z第13章 ts-axios 部署发布【向社区分享你的项目】8 H3 T. W* X8 _! N
讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。+ l& R1 a% j& D2 T
13-1 ts-axios 编译与发布 需求分析 + 编译和打包* Q$ i( K7 w; Y+ j3 q& V
13-2 ts-axios 编译与发布 自动化部署
4 Y, W3 z0 x9 ^  X$ f13-3 ts-axios 编译与发布 运行部署脚本
% Y8 A, {  a" |& W7 s13-4 ts-axios 库 在 TS 和 JS 项目中引用! |7 h+ C) x/ \, S: p" X

# E8 K- H( \' V7 O第14章 课程总结【知识梳理,巩固加深】0 o; c7 {) P/ w# j. H  C/ Q
本次课程的整体回顾,总结学习的内容。
# U0 \( f; C( C5 R6 q" n& S  d! _14-1 课程总结 与回顾
$ _  l, k- E( \( A
  o5 x6 B9 t- R- M7 c: Y" P8 V1 h0 o/ C6 l
〖下载地址〗
- b3 m' O0 j) g' J$ T
游客,如果您要查看本帖隐藏内容请回复

8 _" I" o3 J1 R7 ]2 `$ W; E4 P" H# A$ U! T* f
7 }/ [+ n' H. h- F6 _& ?$ A" C
回复

使用道具 举报

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 | 显示全部楼层
$ E: Y. S: x: R/ ?
正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则