基于TypeScript从零重构axios

  [复制链接]
查看3180 | 回复12 | 2019-8-14 22:25:04 | 显示全部楼层 |阅读模式
+ N6 M* ~0 B7 Z# U! n, [6 w
360截图167708098610583.png
4 K" |0 K% ?2 ~. \: L〖课程介绍〗0 @: c6 H/ t/ h( D( K3 n
        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @& h0 y* F. F' R
, y4 x" E' \$ r8 I1 k3 o" M4 n3 G  j# E
〖课程目录〗
( C! J; l) J, S% k0 N4 D第1章 课程介绍【悄悄告诉你,一定要看,有福利】& @; w7 S% @- W- d
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。3 I: N. h+ e6 [) J1 b7 i9 h2 t( D: }
1-1 课程介绍 试看
! c- J! H: |+ f/ i$ k
" D) D$ b( }1 x* }7 G# P第2章 初识 Typescript【初次体验】
. P' J- N8 r( R$ p% O- M/ j教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。
4 z' M8 b' J6 y# G0 {2-1 安装 TypeScript1 l9 c1 Z% |5 B- S
2-2 编写第一个 TypeScript 程序 试看3 [$ Q6 Q. y3 J9 q1 R
$ F. a! q1 _, U/ _5 s& Y
第3章 Typescript 类型系统【必备基础,牢固掌握】$ B7 v8 o2 x: g5 o/ r
参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。, @) X% [( w. o/ o  f- H" o7 O
3-1 基础类型(上)) ^. Q8 w. x1 g7 T5 ~6 u5 S3 f$ {
3-2 基础类型(下). Y& y: l) |2 N5 H" o" k/ F) J
3-3 基础类型(注意版本报错问题); c/ o+ X8 |) G9 E. k6 A/ n% Z+ h
3-4 变量声明 - var 声明( h6 _0 C' h7 V1 ~! R" W5 d
3-5 变量声明 - let 声明0 S. o7 b# e& s
3-6 变量声明 - const 声明
7 o$ Q3 w+ q9 h4 Z3-7 变量声明 - 解构# [8 ^9 Z! j$ @/ h/ {5 @: z
3-8 变量声明 - 展开9 S# X8 `/ C. W% T% X
3-9 接口 - 接口初探
% _- K; ~: q- m/ `3-10 接口 - 可选属性+只读属性
$ }8 H; F" |3 `  ~5 k2 w3-11 接口 - 额外属性检查+函数类型+可索引的类型
- F0 `0 `2 i, G7 W: o3-12 接口 -类类型+继承接口+混合类型+接口继承类2 O8 l9 d! O/ A
3-13 类 - 基本示例+继承# z) e% ?0 z; w! [; c- K) B
3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符
1 t3 P/ [4 r3 ~5 k( c$ x3-15 类 - 存取器+ 静态属性  P' a# u0 X. R
3-16 类 - 抽象类+ 高级技巧' H' I/ t  ?8 U* m
3-17 函数 - 基本示例+ 函数类型
* j* d& t! v5 x/ q) k; j. E3-18 函数 - 可选参数和默认参数
/ R6 q0 |2 e  j0 [. c% o) E3-19 函数 - this+ 重载
) b, H4 M/ N) e' S3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型8 O- \: e0 ^1 |* G: z1 v; s8 T
3-21 泛型 - 泛型类+泛型约束) `+ c: o& o0 J* v4 _3 w- N' Q
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型
9 N) F9 U8 X7 J) ~' y3-23 高级类型 - 交叉类型
" _, C: u6 D, ]/ C* c3-24 高级类型 - 联合类型( z% N' N. b1 B& D% U
3-25 高级类型 - 类型保护
4 }: f" q  V* P) P+ l8 @1 P. t( C7 X3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型2 E/ Y! G7 b/ w# T8 J; ]* x
! m) m$ e3 W7 s9 Z: K# o
第4章 ts-axios 项目构建【工欲善其事必先利其器】5 a0 u3 n) C8 l5 ^
分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。+ B9 K' A$ x2 B; U
4-1 需求分析7 [  e2 h: C2 u1 V* D' F" P9 Z4 Z
4-2 初始化项目 - 创建代码仓库
# A/ M# @/ o) X2 l2 u( g4-3 初始化项目 - TypeScript library starter
- |( V( ]2 W5 ^5 j8 u2 Y, x/ B4-4 初始化项目 - 关联远程分支
  P$ Z* r7 P* `/ K# l7 E" O) M; `2 Y$ J4-5 编写基础请求代码 - 创建入口文件2 K, {8 S/ F% `# t0 W
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求
' Q8 Q1 f' G( E5 K) J6 N+ Z4-7 编写基础请求代码 - demo 编写
- x% a9 w- h2 x( U0 A. @, ]' g& P; D7 w! h2 @
第5章 ts-axios 基础功能实现【核心流程】: F  `; P. n7 I, u7 A* \7 r; Q
实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。" I4 L" ]; _6 Y0 V6 X6 c1 M3 a$ G
5-1 处理请求 url 参数 - 需求分析
0 f- C/ N6 Q, E5-2 处理请求 url 参数 - buildURL 函数实现3 W( A# u7 v) P/ J6 x$ x8 w1 {
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑2 s' X" n; ]1 Y4 b
5-4 处理请求 url 参数 - demo 编写
, s& V1 [0 s. F7 z8 L0 \5-5 处理请求 body 数据 - 需求分析+ 实现 试看
* `; E$ P7 d) K$ J6 W' g; l5-6 处理请求 header - 需求分析# d! P- ]1 B8 O9 u8 d. Y5 ?  \; K0 L
5-7 处理请求 header - processHeaders 函数实现
" J* g; N$ q5 `: K1 Y% J& [. ~: m% R5-8 处理请求 header - 实现请求 header 处理逻辑
! H% ]% [4 |9 ?# z% l6 ^  H* _( c5-9 处理请求 header - demo 编写
9 r( z7 K8 F8 {5-10 获取响应数据 - 需求分析+实现
# W, k7 @5 R* _0 w5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用
. F/ ^5 X0 P; C7 i- g6 A1 k$ V5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用5 c+ \* ~6 {& _4 ^6 Q* N6 }

8 A; S7 S2 w7 m3 u4 q. K9 N第6章 ts-axios 异常情况处理【不可忽视的边界条件】* H* N% W1 ?+ Q4 t5 x0 H
处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。
$ H3 H3 a( Y. m6-1 错误处理 - 需求分析+ O0 }7 p7 Q! d. G
6-2 错误处理- 网络错误+超时错误+非200状态码+demo
; Q  O5 p1 U% u7 l/ ]' s6-3 错误信息增强 - 需求分析
- n  R* X. O$ p+ S5 X) N9 `6-4 错误信息增强 - 创建 AxiosError 类0 K( _" q- @& [7 @6 W
6-5 错误信息增强 - createError 方法应用+ 导出类型定义, s8 T# T- W+ w

# {7 k; c! U" U# X& j第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】) x, |1 b6 o8 i8 k
把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。) U& `: M. u0 ?2 E5 v9 C# ?
7-1 -1 扩展接口 - 需求分析
& X3 F6 J' S+ L) S7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类
& Y2 C, O  _" o4 a7-3 -3 扩展接口 - 混合对象实现+ demo 编写
9 ]) m) k- k% {7 y. z, X, G& n7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写) Z* @4 y: w/ g/ l$ v) o7 G
7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写- e9 o- I  a" `, k

' t4 r: Y/ {5 T9 z第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】& T0 o" @. r; F' \
实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。
: F2 ^3 U; ?, u. B8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计
0 E6 i+ M7 K: L' O; F3 S  {8-2 -2 拦截器的设计与实现 - 拦截器管理类实现
9 \! v) F" f/ i5 g8-3 -3 拦截器的设计与实现 - 链式调用实现
! i! Q! t: t$ m' _: M+ b  w8-4 -4 拦截器的设计与实现 - demo 编写& [! H( |( t( y3 Y) ^! q1 Y

7 Z) h0 F( @  X' D2 H第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】' Z' M, u" }, L
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。
/ e& L# J0 X" `7 z$ G& ^7 f# w. j9-1 合并配置的设计与实现 - 需求分析 + 默认配置9 U: n9 h( n: a* X7 b1 \
9-2 合并配置的设计与实现 - 配置合并策略(上)# V; W4 p3 |  m8 G" h, O. y% ?
9-3 合并配置的设计与实现 - 配置合并策略(下)
5 J) z+ i* y3 |; w* M9-4 合并配置的设计与实现 - flatten headers + demo 编写: f* J7 w( X) U. o- u4 v: ~& x$ S$ b
9-5 请求和响应配置化- 需求分析+ 修改默认配置' J/ x4 o( R. N4 ^" l
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写. z0 j. U) Z# N
9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现  Z) M1 x8 s8 E: D2 |! z

7 I; U3 e5 ^4 k" B6 C% ]0 t! L2 i第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】# I* F$ _4 [7 D4 P: |! W( D
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
2 r9 Z7 M2 g' }. p10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
; D( Z0 k& s& I( O" b( A5 x10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口7 ?' i1 G9 M( l1 F
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现' V  c- k# V* v$ L" E: e
10-4 -4 取消功能的设计和实现 - demo 编写
8 S. u9 O5 g, A4 l# w4 ]1 C0 B* u! X2 ?3 o! J2 B. s0 B
第11章 ts-axios 更多功能实现【锦上添花】+ t9 B6 f2 ]+ ?6 C0 u2 Z# @
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。1 s& u  N* X+ N3 F# N8 E, f" q
11-1 withCredentials 需求分析&代码实现& demo 编写
( j9 }& f3 ^" F- H3 R/ a: m7 y) b11-2 xsrf 防御 - 需求分析4 c6 u1 |+ [( e, A7 i+ m7 V* n& ~
11-3 xsrf 防御 - 代码编写: O3 X6 h8 k) t2 a
11-4 xsrf 防御 - demo 编写
/ w3 n! g) `" W* q$ W) o11-5 上传和下载的进度监控 需求分析+ 代码实现7 _( ]' ^. N7 |  {. q, {
11-6 上传和下载的进度监控 demo 编写
8 L0 \9 ^! k' v. w5 r1 }$ |11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写
$ }5 d- v: }  J  F* n$ Z11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写) H; h( O# ]. c% q2 V
11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写: @" a: A) i- u# f1 u) \0 k3 _- t
11-10 baseURL 需求分析+ 代码编写 + demo编写
' u4 B( Y9 A; q& |2 Q& s11-11 静态方法扩展 需求分析+ 代码编写 + demo编写
* i+ v" A. @) S) t2 G( E7 ~
2 n, N. n9 x2 {( [6 Q# d第12章 ts-axios 单元测试【保障代码高质量】. n& N& @4 G% y2 |& [
先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%
5 u6 Q4 i( C$ |: E12-1 前言+ U9 n8 G# X2 e+ {2 c2 Z' Y9 x' D
12-2 Jest 的安装和配置 Jest 安装
2 u* v$ I1 U7 k  }. [) y* P- D12-3 辅助模块单元测试 准备工作' g# A6 Q, z+ l
12-4 辅助模块单元测试 util 模块测试-+ D6 M' K) n& L4 C; j+ x& u' \
12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试0 p7 F& v- m) e( Q" F
12-6 辅助模块单元测试 headers 模块测试" ~" N* b$ ^+ v0 z5 B2 c' v
12-7 辅助模块单元测试 url 模块测试& e! M, I) V  Z( U
12-8 请求模块单元测试 jasmine-ajax + 测试代码编写
! V# M- b$ w3 e6 D12-9 header 模块单元测试 测试代码编写
6 i3 o/ b1 W5 b) h) W5 D12-10 Axios 实例模块单元测试 测试代码编写4 \6 b: u  w9 K* a: b2 O
12-11 拦截器模块单元测试 测试代码编写, D* {. ]. L. ]% w1 N5 F
12-12 mergeConfig 模块单元测试 测试代码编写! C; j# d5 m9 R# E7 K  n0 `: A! D
12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试
3 J% ?# E; z3 z7 [( B/ ]5 ]12-14 剩余模块单元测试 defaults 模块单元测试
0 P% Y3 L4 ~2 J1 m8 I12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试
5 l* c% ]8 t  {12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试, U# l" Q+ n2 l1 Q! ?% R
12-17 剩余模块单元测试 补充未覆盖的代码测试
. ]. Q0 K# M  \8 u+ ^2 z" o! \# c
第13章 ts-axios 部署发布【向社区分享你的项目】
8 {6 m* \; y8 o讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。
" N9 A5 D2 F" C. [# Q( h! H/ ^: m13-1 ts-axios 编译与发布 需求分析 + 编译和打包
1 L. `& j& ~; ]8 x/ n5 i13-2 ts-axios 编译与发布 自动化部署
0 T9 ~% i) G2 K" d6 K7 I3 ?13-3 ts-axios 编译与发布 运行部署脚本
# u- S8 i. X( Q& {7 @13-4 ts-axios 库 在 TS 和 JS 项目中引用) a  X0 A7 ?* m* a

+ b# }8 f6 Q. R3 _; N( V; u7 t第14章 课程总结【知识梳理,巩固加深】' P* W( W% J- q2 A
本次课程的整体回顾,总结学习的内容。
: L! |% {; d- @+ }/ O1 i9 @14-1 课程总结 与回顾
* s9 p# g! p5 _1 K. ~9 h. P7 ]# l  Z; ]5 M5 M9 O  u

1 ?0 R: |+ H$ b4 k5 ^) _〖下载地址〗2 |2 P/ b- b$ a; Z
游客,如果您要查看本帖隐藏内容请回复

0 t" H  v) `7 J6 N) M
4 Q7 d3 S2 W! [. ]9 w$ q
, i' B( ^# b8 {) z+ n! V. V
回复

使用道具 举报

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 | 显示全部楼层
* }; p' y8 {- F6 B+ e$ C8 Y
正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则