基于TypeScript从零重构axios

  [复制链接]
查看4912 | 回复12 | 2019-8-14 22:25:04 | 显示全部楼层 |阅读模式
8 O& _2 c4 C! d$ H6 h3 u0 f+ f
360截图167708098610583.png 7 Q+ V: a. j9 G# B2 L% a
〖课程介绍〗
( l4 }6 Z- Y2 F* x        TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @6 z8 a6 m$ y3 c% h
, y4 x" E' \$ r8 I1 k3 o/ l2 `' E5 F, C' [  t
〖课程目录〗' H; y( a" O$ |# }' _9 q* L5 U
第1章 课程介绍【悄悄告诉你,一定要看,有福利】* W0 T; ~1 }2 _" _
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。
) X/ X* b. A5 a* J5 v1-1 课程介绍 试看6 w4 ^6 v, ?& {! K4 {, a9 ~

  ?$ k+ @% ^1 S# k+ P4 ~$ h; O第2章 初识 Typescript【初次体验】
- O6 Y- q% u) H# P2 Z# l/ s教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。
; ~9 x& A$ Z# w7 \2-1 安装 TypeScript/ i: ?  r1 u' C" E8 D! W
2-2 编写第一个 TypeScript 程序 试看
9 B( |0 T6 \4 ~& K4 v
" d$ A9 F- M! J5 D第3章 Typescript 类型系统【必备基础,牢固掌握】
9 [* g' i4 b8 \  j' D' q. f! Z. G# c参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。8 t; M* r* z4 S& R
3-1 基础类型(上)
/ d1 r, H5 z* W( Q) o3-2 基础类型(下)
! g" D6 {2 @6 z) _! L* ?7 {2 I5 \3-3 基础类型(注意版本报错问题), z0 u% A) l& y6 B. s
3-4 变量声明 - var 声明( ~4 y, k! b! [3 w+ G: G
3-5 变量声明 - let 声明0 f0 m8 H0 q8 w8 X5 |
3-6 变量声明 - const 声明
) x4 Z/ e, k: V* A1 ^2 {6 X3-7 变量声明 - 解构1 P: A7 `4 \+ f
3-8 变量声明 - 展开
" G5 R2 X; P6 s8 `3 j) Y# P3 K/ D& M3-9 接口 - 接口初探/ U6 ^: ~- X3 }
3-10 接口 - 可选属性+只读属性
% ?& U0 a  p/ I/ ~, s3-11 接口 - 额外属性检查+函数类型+可索引的类型4 k- O" i) r1 X5 [* q
3-12 接口 -类类型+继承接口+混合类型+接口继承类
: t8 K( B, P% k; ^0 ]+ a3-13 类 - 基本示例+继承
5 l" X9 ~4 Q- V3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符
4 i' K% P* f% y& m% O7 e6 E" F- w9 ~3-15 类 - 存取器+ 静态属性4 H8 g) p4 J/ ^- B: @, y
3-16 类 - 抽象类+ 高级技巧
9 c2 ^8 Y0 F, X* f+ ?! P2 Z3-17 函数 - 基本示例+ 函数类型
8 J3 b3 x! _4 |: @3-18 函数 - 可选参数和默认参数( X( ]9 C' A, @! p9 S) d1 k
3-19 函数 - this+ 重载
4 f7 d8 s- x; b7 Q3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
" ~5 q- |8 i5 P6 }# d8 M0 {9 K3-21 泛型 - 泛型类+泛型约束8 u' z0 B# K$ D+ m% z+ n1 y& S; H5 P) [
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型- K  I8 l" F2 D( q0 g
3-23 高级类型 - 交叉类型# T0 Q& x! i8 I* {% j
3-24 高级类型 - 联合类型
1 L" p1 T' J2 T% i0 s  i' V3-25 高级类型 - 类型保护# w7 ^! A; N; z$ |0 u/ J$ C
3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型3 k4 k' f0 T' z' m

. F# n. \+ v  B( @# H' N0 L: T第4章 ts-axios 项目构建【工欲善其事必先利其器】
( J2 q1 K/ B/ U# R- H分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。3 F) F9 C# F/ d# _) A* \; A0 L
4-1 需求分析
! l4 ^: N7 _" l$ |4-2 初始化项目 - 创建代码仓库! y( c* s! j( g/ J' c8 J
4-3 初始化项目 - TypeScript library starter2 R, D* W+ ~- D. B! _+ V$ _1 I
4-4 初始化项目 - 关联远程分支
. u) Y  \( Z: h0 i- B, |4-5 编写基础请求代码 - 创建入口文件0 F; T! J' d! E( r' y3 n' s/ T6 C
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求
! k( E0 v( f! [+ B' V; g$ p4 Z4-7 编写基础请求代码 - demo 编写& D) V) G1 p8 g; S
2 u7 H# {, d0 E$ U3 {: d
第5章 ts-axios 基础功能实现【核心流程】
) x% ?+ r2 b- r实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
: d9 d0 b) F- L) w2 @( v: g3 }5-1 处理请求 url 参数 - 需求分析! j# H; A5 H# o
5-2 处理请求 url 参数 - buildURL 函数实现4 r% U/ |6 c* m# _4 y5 k
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑7 q0 E8 j, {' l. ^
5-4 处理请求 url 参数 - demo 编写7 O5 @4 @- L3 l4 ]* v
5-5 处理请求 body 数据 - 需求分析+ 实现 试看+ U1 G& C. |4 W; m+ q
5-6 处理请求 header - 需求分析
, B. B4 z( Q! E5-7 处理请求 header - processHeaders 函数实现
1 F" p; z* n& @$ E, w  j# [5-8 处理请求 header - 实现请求 header 处理逻辑, d/ C( k" a2 M+ ^- r' J6 ~6 J  g
5-9 处理请求 header - demo 编写
7 ~  C' m& p7 i( U$ [0 _. V+ L5-10 获取响应数据 - 需求分析+实现
1 `; ~( B% f; Q$ o- l5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用
! B1 A: I. B1 o" C/ r$ E6 s5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用% I+ \1 x7 }1 C( M7 J0 E5 b
0 x9 V- Q8 e! M+ V
第6章 ts-axios 异常情况处理【不可忽视的边界条件】
" h8 x+ E$ X) b- t1 h处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。
+ t& i5 {+ w8 N2 K; o6-1 错误处理 - 需求分析
0 B0 q# F" n) n0 b/ X$ z6-2 错误处理- 网络错误+超时错误+非200状态码+demo! x# A% L$ s9 j# l* _9 L5 q9 L2 g
6-3 错误信息增强 - 需求分析' L2 P9 d+ \: m- D* Z& V% o8 S
6-4 错误信息增强 - 创建 AxiosError 类! G. D% ^2 z9 l) H9 e4 F
6-5 错误信息增强 - createError 方法应用+ 导出类型定义
& K5 k8 ?4 v3 E/ ~! U. L
! J  m- }6 i# L/ x0 `& D- |  `第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】, P* T$ R$ V$ \3 I' T
把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。, J6 N' v" x. ]0 D: q: S# X
7-1 -1 扩展接口 - 需求分析  _# X- L! W9 L/ `. W$ h8 A
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类
' e2 c; H/ ~/ K, ~6 \  R7-3 -3 扩展接口 - 混合对象实现+ demo 编写! y& E; |' {; _2 W
7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写
2 b% f# Y" n; |. g* u% y" T+ F5 c7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写0 `3 h, W9 i8 x( ?7 {9 b

' j; i; P- O2 ~8 X第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】
" Q; G% K9 c; H& b. ^" s7 t实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。
) m0 j4 A5 L+ f9 Y/ A4 V8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计% p! D8 t# ]5 S) U) n
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现
% t6 k9 V2 F' S4 W* O7 ]8-3 -3 拦截器的设计与实现 - 链式调用实现
2 D! K+ T1 i* y- n$ b, R# H/ T8 x8-4 -4 拦截器的设计与实现 - demo 编写  A5 s4 o* G! c1 \$ t4 ?' x3 s7 y9 ?
+ h- X+ @( g% X$ a9 B1 Z* ?# m! q
第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】. g& j( v/ H" h1 _: ?
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。5 @! H  {- z& Z7 m
9-1 合并配置的设计与实现 - 需求分析 + 默认配置3 M" V: k1 |$ @
9-2 合并配置的设计与实现 - 配置合并策略(上)
2 O" [, H2 ~  [5 Y9-3 合并配置的设计与实现 - 配置合并策略(下)
  N0 l! p2 J+ E9 ~9 \" x4 _9-4 合并配置的设计与实现 - flatten headers + demo 编写  o' M7 T9 U& A& X
9-5 请求和响应配置化- 需求分析+ 修改默认配置: D8 q& [. Y/ |7 w/ M
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写
3 O) O; ]6 H7 [+ D9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现  r/ O8 ?& m" u) L  D- E) {
$ V" V3 J, y4 B' P8 f6 N
第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】/ T8 w, F" n6 l" y' j
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
  {. ]1 @0 w) F10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
  s9 e3 c  B4 [5 w7 S8 t$ v' p10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口" n- E; M8 ^& y5 n5 U
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现
# v* c" @  d# @/ x' q/ c10-4 -4 取消功能的设计和实现 - demo 编写* o7 S: t6 n$ K8 T! @5 f2 D% [
. D& {/ H' f' z9 B  f
第11章 ts-axios 更多功能实现【锦上添花】
+ |4 c0 `5 ?0 z6 X& a* L; \3 V实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。1 j+ e8 L8 L7 w& f! ?* f
11-1 withCredentials 需求分析&代码实现& demo 编写
+ |, W, h. |! H6 R7 J. |11-2 xsrf 防御 - 需求分析4 E. w2 R' l/ N3 e4 r
11-3 xsrf 防御 - 代码编写
6 |  P2 s4 p+ y11-4 xsrf 防御 - demo 编写
7 b$ k9 C. Q" R) x( z/ A11-5 上传和下载的进度监控 需求分析+ 代码实现
: N  F; e9 ], {: Q0 a11-6 上传和下载的进度监控 demo 编写
  ?0 L( B/ V! ^  y' g11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写
4 u% ?/ ?6 P% l9 i11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写, c9 e8 ~: L/ G# V8 p
11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写
0 W* A8 ~- r2 j  N0 n) |. }, J11-10 baseURL 需求分析+ 代码编写 + demo编写
3 a5 \; T, i+ `11-11 静态方法扩展 需求分析+ 代码编写 + demo编写
: J& z9 Z5 ^. H* X1 v/ O0 S5 D5 `# H5 w
第12章 ts-axios 单元测试【保障代码高质量】
, Y, t. }+ p) X1 E& N0 |先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%0 t7 B: g' `: _# a0 o
12-1 前言
# u' s( H0 P2 O12-2 Jest 的安装和配置 Jest 安装; Z5 u& l7 s/ w, w% Y7 Y
12-3 辅助模块单元测试 准备工作8 Z" E( I, l) c( ]- j
12-4 辅助模块单元测试 util 模块测试-2 T! Z" y7 a$ N- N! C+ E4 B4 f
12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试
& @; D9 q, L1 o" h' p12-6 辅助模块单元测试 headers 模块测试$ L+ I8 ]3 a3 Z# x
12-7 辅助模块单元测试 url 模块测试
& J+ o6 P- @; g3 l2 n! i9 @3 M12-8 请求模块单元测试 jasmine-ajax + 测试代码编写
. J7 ]2 s! g8 `- i12-9 header 模块单元测试 测试代码编写
/ u1 E; |" Z8 E- B( b( C; ]12-10 Axios 实例模块单元测试 测试代码编写8 I; A4 I- t! D3 [, s) s0 l% f
12-11 拦截器模块单元测试 测试代码编写
4 f( s: x: @* f& g, h, R# ^! I12-12 mergeConfig 模块单元测试 测试代码编写, }$ w; j" n2 i- a4 p4 ^$ y: L
12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试$ `8 f$ R( O7 J  l; P
12-14 剩余模块单元测试 defaults 模块单元测试
4 E8 {' `  V/ z2 t0 g) H$ }12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试. W# E  u+ ~: y
12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试! @! {- @9 I1 s1 V; z( w7 H7 j. o
12-17 剩余模块单元测试 补充未覆盖的代码测试
% S  u, C: t( z% S# t* b( S' j, e8 |6 l) T- Y; s1 e
第13章 ts-axios 部署发布【向社区分享你的项目】
9 w. h: P# g% N讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。
' h" S1 |* ?+ t0 G13-1 ts-axios 编译与发布 需求分析 + 编译和打包
" x8 a9 ^! g* [' d13-2 ts-axios 编译与发布 自动化部署
- S3 t% ?9 T' s4 G6 z: z13-3 ts-axios 编译与发布 运行部署脚本
/ ]4 r2 W8 Q/ \, B7 z( ]0 }13-4 ts-axios 库 在 TS 和 JS 项目中引用/ b, X/ p1 L( v7 Y% t* g$ l/ O( [
& T+ R9 P# ~- S1 M* I
第14章 课程总结【知识梳理,巩固加深】; |* V6 F: n0 q% f3 w
本次课程的整体回顾,总结学习的内容。
0 q/ X1 A6 ]- S14-1 课程总结 与回顾
: ^5 ~, M9 T% Z- s" V0 z/ b" i- |. Q& n( y; E

  ]7 z) @* j3 }5 d5 b; ?; M〖下载地址〗/ Z) \( b1 g7 m7 j! C: q4 z. l
游客,如果您要查看本帖隐藏内容请回复

: L' ?1 ~0 N9 S% ^- K" ^- Q; P# z( D7 r

% G1 ]7 K! v( j' D5 ]; V8 d/ O8 T' z. f4 m
回复

使用道具 举报

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 | 显示全部楼层
) r. H: c' |- k% J# s
正想axios ts顺便也可以学学真棒
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则