基于TypeScript从零重构axios

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

+ }. v% T3 H0 e/ w. M! k0 y 360截图167708098610583.png
  l$ t+ V4 A) o% ^* Z8 k〖课程介绍〗
, S; N8 R, W4 G4 `4 J' n        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
7 g3 L, E9 f" z/ O2 j- @9 o% ?: m& U, y4 x" E' \$ r8 I1 k3 o
: {& `; e" @2 N4 q〖课程目录〗; q' C4 w  p8 S7 k6 t
第1章 课程介绍【悄悄告诉你,一定要看,有福利】+ m" |% Y1 m* k* _% \5 A( N( k
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。
' E# G7 A3 t" O6 M& z1-1 课程介绍 试看/ ]( `- n) `& I  o% V( e( `  p

/ e' \: M5 h# b' @8 B+ W第2章 初识 Typescript【初次体验】
5 ~+ V5 Z% p0 q' S  `* ~# P& ?教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。
+ I  w1 ?5 ^% ?$ {6 P! g2-1 安装 TypeScript
6 d+ R; o: t3 y9 ?* [: `2 A! g2-2 编写第一个 TypeScript 程序 试看
6 z7 J' K9 |! L4 ^6 N. O* B& v- l) k
第3章 Typescript 类型系统【必备基础,牢固掌握】
& Q% ?. t6 L& H3 {参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。3 b# b8 L& A+ \7 o$ l
3-1 基础类型(上)
( D/ j7 d9 i$ P# O* h+ [3-2 基础类型(下)
7 v" `  N* p/ W8 J6 r9 a) v  O3-3 基础类型(注意版本报错问题)1 J7 I$ d3 X" L3 B5 l
3-4 变量声明 - var 声明* J7 K% b, r0 L% {
3-5 变量声明 - let 声明8 O& k% @1 k( j$ d' l$ ?7 g
3-6 变量声明 - const 声明: V, k* f' j# i  ?3 B% z
3-7 变量声明 - 解构
* x/ O& B% Y$ U0 [4 r) }8 S# N3-8 变量声明 - 展开1 t7 ^3 L' v9 U. E6 ^8 i
3-9 接口 - 接口初探+ Q5 |  c: m3 E# {' |# m! D
3-10 接口 - 可选属性+只读属性+ N# K# l4 u7 U% O) x! }5 ]1 Y
3-11 接口 - 额外属性检查+函数类型+可索引的类型
! B4 \* u0 z5 v/ V3-12 接口 -类类型+继承接口+混合类型+接口继承类( S+ {3 S; ^, i/ v) N; M$ I% }% ^. k
3-13 类 - 基本示例+继承
2 H5 N0 E. p' [! C2 F) a2 b3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符5 [3 f7 ^( [. D5 p
3-15 类 - 存取器+ 静态属性
) O3 J% l$ e+ l! F0 R) m; e3-16 类 - 抽象类+ 高级技巧, z. p& d( }- Y* A8 F0 o
3-17 函数 - 基本示例+ 函数类型
1 x) w2 O* I$ L# }% D3-18 函数 - 可选参数和默认参数! x" i6 p. q% C& w8 Y5 l8 u3 n
3-19 函数 - this+ 重载0 K$ T+ ]5 P+ U5 D& r- p/ j
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
1 I2 r- h) O, ]/ a7 {3-21 泛型 - 泛型类+泛型约束) E0 [+ E7 u% I! s: f) H, e) _
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型6 A$ |1 Y1 A" M
3-23 高级类型 - 交叉类型; ^+ r1 m  b# l4 r
3-24 高级类型 - 联合类型6 a2 ^# w) z3 R0 f- r+ J7 \) h
3-25 高级类型 - 类型保护( o& P* k7 S+ Q. `8 f7 Z- I
3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型) |$ F: Q2 e7 S! q
1 i3 @- |2 v( e0 G0 h
第4章 ts-axios 项目构建【工欲善其事必先利其器】
  [$ c+ r- F& N  s4 p分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。; @* `# M, i9 \' j! [' i
4-1 需求分析
; m% b1 |- ~. v: R5 V( |4-2 初始化项目 - 创建代码仓库
. U% Q* s$ x: _& w: F4-3 初始化项目 - TypeScript library starter5 e9 j" n' ~# Q, p6 t( D5 ^
4-4 初始化项目 - 关联远程分支
) n& o8 S# R1 r- t1 W4-5 编写基础请求代码 - 创建入口文件
2 U: z/ v" r% @5 a. V4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求
, x# i# `- x" a# }/ B# p4-7 编写基础请求代码 - demo 编写
# y2 H& S+ ?* L2 q" v, q0 S# h& \3 e- N, U7 p! k
第5章 ts-axios 基础功能实现【核心流程】
# p* z/ b) p  O$ z8 y* a5 Q) _; A4 x实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。; v+ i' z: ^# O! h0 E
5-1 处理请求 url 参数 - 需求分析
: s) T. O6 @6 f. I# R5-2 处理请求 url 参数 - buildURL 函数实现1 G& P: H# J- X$ n2 r4 r1 M
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑
9 }' Q  Z) p6 {( D7 L5-4 处理请求 url 参数 - demo 编写# s: Z+ [2 \* T% \; V3 ]
5-5 处理请求 body 数据 - 需求分析+ 实现 试看
- C" u$ c5 i( F5-6 处理请求 header - 需求分析
9 {% F. I4 j+ x1 `3 a5 M2 t! }1 C: [5-7 处理请求 header - processHeaders 函数实现
) q0 i9 M+ J$ i5-8 处理请求 header - 实现请求 header 处理逻辑
5 N; h$ f/ d8 y. F5-9 处理请求 header - demo 编写
- E4 Q6 `) U* k& c, }- l5-10 获取响应数据 - 需求分析+实现1 r$ X5 }  v1 A3 j, \8 n, H1 T3 ?8 x  q
5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用/ R9 K! Y! h" M: n; Q7 y) ^% u2 \# q
5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用  \* i  [2 d0 Q" ?# Q. |* _5 \

$ u0 G/ `3 K5 r) g- F第6章 ts-axios 异常情况处理【不可忽视的边界条件】
& J, C4 P  V7 [" V) C处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。3 Y7 p+ J8 k, m
6-1 错误处理 - 需求分析9 K* x6 e* ^6 w
6-2 错误处理- 网络错误+超时错误+非200状态码+demo
  d$ c9 e" ?3 J9 q5 E* P9 c" e6-3 错误信息增强 - 需求分析5 }. @0 d+ k4 t( Z  r4 N
6-4 错误信息增强 - 创建 AxiosError 类+ A4 D# X0 K( [# b% ]
6-5 错误信息增强 - createError 方法应用+ 导出类型定义
% z$ \: A& B) X+ y6 _
$ ]% G) p% C  F. v" e# Z( i  b第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】' J# ~1 ?1 U3 j6 g4 q. `9 Y* ?8 p
把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。
9 F0 K: p1 @$ F& U* h6 k7-1 -1 扩展接口 - 需求分析
6 H: H" L6 k% a8 x7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类2 h6 y5 L1 |, D3 }# j. s, [
7-3 -3 扩展接口 - 混合对象实现+ demo 编写
$ g1 ]; K- z& H7 V- E7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写( J6 A- _9 Z8 q
7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写4 q7 k6 p$ f$ S. n# q
% i3 }4 A) {8 w: N. {% H$ |1 n
第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】7 B& |4 I6 O, [
实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。1 H5 Y# S6 x- k  y
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计
5 W( N/ N6 b$ [+ e% k$ O8-2 -2 拦截器的设计与实现 - 拦截器管理类实现! E, t1 o- i6 b7 ^4 P$ g; X
8-3 -3 拦截器的设计与实现 - 链式调用实现
0 v: k0 ~$ w% H- o* C; C8-4 -4 拦截器的设计与实现 - demo 编写2 V& s3 a! ~. ?4 U9 ^. p0 S5 n
- V; |- I0 o# m; f
第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】( j2 K: Z/ J) A) U2 ]
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。
! W8 E5 Y- T* u' F, ]9-1 合并配置的设计与实现 - 需求分析 + 默认配置# F. S" {. W: Z/ R: U
9-2 合并配置的设计与实现 - 配置合并策略(上)
* H3 N4 V5 I# a% A/ @& k9-3 合并配置的设计与实现 - 配置合并策略(下)& G6 z5 @$ T, f) W9 P" D. L
9-4 合并配置的设计与实现 - flatten headers + demo 编写+ r  n5 B$ b6 @# E* r
9-5 请求和响应配置化- 需求分析+ 修改默认配置  \* G: [% [' y& ^9 D: T( f
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写
" ~1 ]$ G0 K& `$ Z9 Y2 [  r) O9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现
2 [4 }# d/ f7 C( p
; T" ]! y# p, R2 D7 S7 y* K第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】  l! x  i8 {% O3 e; Q8 ]
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
5 q# J  c& D, y) l! N10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
+ P- q/ i0 s0 L" K  B. Q10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口5 T( _# h! f# ^+ L  e
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现, a6 P! d7 H: L9 L' }
10-4 -4 取消功能的设计和实现 - demo 编写
6 P3 c* ^/ {" E" d* D6 B
" R9 }. G* P- a' Q/ _第11章 ts-axios 更多功能实现【锦上添花】0 ~: J0 [4 ]3 Q- N# [+ E
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。+ X9 i2 S* B: E
11-1 withCredentials 需求分析&代码实现& demo 编写: K( @/ C  g! j: k; o
11-2 xsrf 防御 - 需求分析5 c2 T% c4 @6 ?& [% Z4 G! J6 n
11-3 xsrf 防御 - 代码编写- J8 q  q0 t& n! H
11-4 xsrf 防御 - demo 编写3 g8 o  Q- L1 j4 J- j
11-5 上传和下载的进度监控 需求分析+ 代码实现' m' e9 {* L1 O1 S/ Y' ]
11-6 上传和下载的进度监控 demo 编写
! F9 ^3 j; l6 o! ~- F1 g11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写' H& l( N  x/ U4 c6 I
11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
" _& L+ H2 i4 p) X: J11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写$ `1 `' k2 \. F9 B  N( Q
11-10 baseURL 需求分析+ 代码编写 + demo编写
$ C5 o3 p4 j. A, A# @& C7 |" W11-11 静态方法扩展 需求分析+ 代码编写 + demo编写
( v9 S# X1 A- ?6 Y  \2 t: l- p+ I' l# X6 f, |# H/ ]
第12章 ts-axios 单元测试【保障代码高质量】, i8 M  h* B8 e( A2 S+ F
先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%
$ V% N! ~) G: U9 L7 ^12-1 前言' Z$ z$ z) Y" z) L
12-2 Jest 的安装和配置 Jest 安装" C/ z. w6 J5 J. a  a
12-3 辅助模块单元测试 准备工作% x! G/ \% g8 z( F; Q; E" W* Q
12-4 辅助模块单元测试 util 模块测试-
5 |! r0 ]$ v5 p5 X! m$ j12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试( ]! B& n/ c$ s, A3 P+ A
12-6 辅助模块单元测试 headers 模块测试
" W; K7 B( Q- E7 G. |12-7 辅助模块单元测试 url 模块测试
# b# V2 D6 D7 ^4 t12-8 请求模块单元测试 jasmine-ajax + 测试代码编写2 n, z7 y$ \: g9 k4 N
12-9 header 模块单元测试 测试代码编写% ~2 \4 t. l7 x
12-10 Axios 实例模块单元测试 测试代码编写
6 E% c0 d0 I! y' i7 G12-11 拦截器模块单元测试 测试代码编写+ x- P3 d0 r7 @5 M4 G
12-12 mergeConfig 模块单元测试 测试代码编写( @" B$ ]$ l* m- m2 r" C, {
12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试; j1 t0 T7 x3 b& ]& z9 h. [
12-14 剩余模块单元测试 defaults 模块单元测试8 l8 q* f; _$ @& U$ g
12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试) ~' X9 b6 r; Y
12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试
1 z& h  z0 f8 B  [& M" H12-17 剩余模块单元测试 补充未覆盖的代码测试
* I) N0 e4 d4 N; p" W
9 {' [( {- K" u0 y( [; f! A第13章 ts-axios 部署发布【向社区分享你的项目】
* D8 t# w: z5 W! x1 }* h讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。) s2 }9 }8 }: I+ m( ~, m
13-1 ts-axios 编译与发布 需求分析 + 编译和打包
" \. ^2 Y9 _  U  |* G8 T/ G13-2 ts-axios 编译与发布 自动化部署0 {6 t% G1 B1 u+ H4 l2 \
13-3 ts-axios 编译与发布 运行部署脚本
3 r% A- x3 U' T7 @3 I9 K) T13-4 ts-axios 库 在 TS 和 JS 项目中引用  G7 I" G; V' W5 {5 X0 ~9 S

& F( n# T( C. d+ R/ q第14章 课程总结【知识梳理,巩固加深】
  H1 k. y6 q) N" h2 \4 H/ C% p本次课程的整体回顾,总结学习的内容。0 Q/ q8 W! a3 N* W( J* I. S4 F" |# f
14-1 课程总结 与回顾! o' Y0 n# f' g7 F: m6 f2 {
3 i6 {5 e- \0 {; x5 l

% f; U# E' k' F. h8 I! @* Y〖下载地址〗& r$ L; ?9 J9 _4 M  Y7 P
游客,如果您要查看本帖隐藏内容请回复
7 M9 U$ @( O6 `

; g5 q+ t1 u, h8 y1 q) E! e3 J& W$ g8 C6 l* D2 V/ G9 O
回复

使用道具 举报

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 | 显示全部楼层

/ y) I7 z8 L$ a( l- _: z正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则