! l' t" U" J( z. T" I0 ]* ^+ J1 ]
/ Q% u: {* @1 k1 l0 P/ F$ `〖课程介绍〗+ f# J! n6 I' a( Q+ ^- J9 z0 W
TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
- u- O) Z% [% e+ i) P, y4 x" E' \$ r8 I1 k3 o
1 H, P. r9 [% E. A9 G6 x- i〖课程目录〗
4 W1 ^2 |6 Z; i: Z t第1章 课程介绍【悄悄告诉你,一定要看,有福利】3 n |, P' C) V% ?$ V- O
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。
K) |" G+ ?) z5 }2 K8 Q# R1-1 课程介绍 试看' r1 n y+ D S, ^% Y
- A8 j7 z9 Q2 y3 G9 [第2章 初识 Typescript【初次体验】
5 v$ e. ^3 A! S教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。! p8 F8 V: T \# K
2-1 安装 TypeScript" |" J4 y- l: C: \9 b
2-2 编写第一个 TypeScript 程序 试看6 O7 v. z* r2 ~* c; H+ _
5 u0 B9 s# w& |9 l" n
第3章 Typescript 类型系统【必备基础,牢固掌握】
. i# Q$ W8 L0 R. r参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。
! O: g9 D: W- h3-1 基础类型(上)
( Z5 j1 `0 @/ \8 k4 l+ t3-2 基础类型(下)
" p. r; I) @' J) J- h3-3 基础类型(注意版本报错问题)
0 Q$ u u: N) C/ @# J8 Y0 ]' P3-4 变量声明 - var 声明
% K+ ^- k1 B. m; L( a- P3-5 变量声明 - let 声明
$ @( l, [, v1 E y8 C3-6 变量声明 - const 声明2 U7 t% m- F4 M& `. K ?
3-7 变量声明 - 解构% C: w4 a( J7 f5 {) a
3-8 变量声明 - 展开" ?+ {8 R) b' O
3-9 接口 - 接口初探; T% M6 B4 S; D) d2 ]5 v3 O
3-10 接口 - 可选属性+只读属性% |- P/ Z# r" B9 d1 {6 s- Q
3-11 接口 - 额外属性检查+函数类型+可索引的类型
; Q0 K/ a |- ^. d4 O3-12 接口 -类类型+继承接口+混合类型+接口继承类
# j7 w' a: v( j7 _, w9 M; X3-13 类 - 基本示例+继承
! n, w' z- K; I3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符: i! M: i. k* }" H/ }
3-15 类 - 存取器+ 静态属性9 h5 c0 g5 c) d6 g" J
3-16 类 - 抽象类+ 高级技巧- T! I6 v) w- Z
3-17 函数 - 基本示例+ 函数类型: G0 X, ]3 Z- r- J# c
3-18 函数 - 可选参数和默认参数
* ^$ f0 v% ^$ ]# C3-19 函数 - this+ 重载4 N, T8 E0 }" y3 \) b# L7 N6 f2 Z
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
7 G0 `7 X( `/ }9 p' |3-21 泛型 - 泛型类+泛型约束' z# q- ?) y; E
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型
) `" `" V: [* D' B- |' N: s3-23 高级类型 - 交叉类型4 q/ ` ^ S1 G- M8 B. e
3-24 高级类型 - 联合类型
+ B$ K' @) g/ J" [, W3-25 高级类型 - 类型保护8 f H7 T+ w$ m0 _; Z; t
3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型
( q& [. r- ~) I0 c5 n+ k% V" g0 ?' E* a4 S
第4章 ts-axios 项目构建【工欲善其事必先利其器】7 ^/ x; y- c! C9 k2 d% k
分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。
+ s& s& |, T$ T4-1 需求分析
+ G2 V, Y3 f1 m4-2 初始化项目 - 创建代码仓库, D F1 P, a4 {3 K2 e; j$ Q9 y
4-3 初始化项目 - TypeScript library starter
8 N6 j" K% R5 C0 q! g/ ?9 a4-4 初始化项目 - 关联远程分支
, g& X7 ]# g& _# \$ e$ r/ T/ c4-5 编写基础请求代码 - 创建入口文件3 E3 `" A( M# x% |3 _
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求
3 O2 L2 V+ r: k4-7 编写基础请求代码 - demo 编写5 N7 c% D7 k: X1 b3 C$ A( d# R$ Q
+ T% @ X* F9 c2 q( Z: O! X6 T
第5章 ts-axios 基础功能实现【核心流程】1 d U4 V" U: O. S7 m
实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
1 B# s" ~4 w" N- l5-1 处理请求 url 参数 - 需求分析* v0 m9 `. ^8 E8 }
5-2 处理请求 url 参数 - buildURL 函数实现
+ O9 o4 u& b% b0 F; T5-3 处理请求 url 参数 - 实现 url 参数处理逻辑% p |0 A6 k+ }+ L3 y+ ]% D8 Q
5-4 处理请求 url 参数 - demo 编写" y6 [$ w/ B. E+ M
5-5 处理请求 body 数据 - 需求分析+ 实现 试看
6 q `8 i% J3 N! `# C# R5-6 处理请求 header - 需求分析
+ ]' _& O, v) W2 G1 m5-7 处理请求 header - processHeaders 函数实现6 A- B3 h" T* e) x$ L5 W& x- q: a2 I
5-8 处理请求 header - 实现请求 header 处理逻辑) P) N0 u: Z4 O, k
5-9 处理请求 header - demo 编写$ P, P( V& \+ I! Z
5-10 获取响应数据 - 需求分析+实现1 [$ `6 y5 M- N4 m2 s. ^$ ~' j
5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用$ d( B ~. V3 t4 \1 W. c M0 p
5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用
' W. z7 |7 U; `* c+ o/ J1 v6 D1 T- w: |. W- ?: _% a& p( \
第6章 ts-axios 异常情况处理【不可忽视的边界条件】
6 k7 f2 |: }& X处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。 l9 J% V) ]- W c. U( W
6-1 错误处理 - 需求分析
! g- t. H8 t) n/ j6 X% y2 G6-2 错误处理- 网络错误+超时错误+非200状态码+demo* m" `/ B- c% g) Z
6-3 错误信息增强 - 需求分析
% x ^& Q6 p- V9 Q9 m' J! {6-4 错误信息增强 - 创建 AxiosError 类
5 r0 E. L- b- X: i. R6 R6-5 错误信息增强 - createError 方法应用+ 导出类型定义- N% ^/ L* y% F2 z8 c
: q/ i- a* u+ }: r. Y第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】6 u A5 h" z( F& A$ t
把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。/ E' G0 z' A) P1 f
7-1 -1 扩展接口 - 需求分析
- t. t, T4 u' @7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类
* c! R& V k2 w7 O7-3 -3 扩展接口 - 混合对象实现+ demo 编写
& t: p5 M* _9 O2 y2 P4 R7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写7 z" c, Q& ~) S6 R6 v# Y4 |6 L; m
7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写# U7 i, u5 A4 B( k: M
0 |( W. p. C2 s6 S5 R4 V
第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】
' A. f: m9 y6 X实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。( U2 v1 C6 z/ p2 k, b! W
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计$ R `3 }; K8 _# T" d0 R4 T
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现% G4 Y0 h# |+ ]$ l/ Q9 x
8-3 -3 拦截器的设计与实现 - 链式调用实现* D( j+ g. F: H, |9 t
8-4 -4 拦截器的设计与实现 - demo 编写
, I7 ^9 F9 F- a
$ l+ R2 @7 C2 {0 ?; e第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】2 {! {8 n A1 j( M" P
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。
% u0 ^! p7 b& u4 z9 Z1 v: f9-1 合并配置的设计与实现 - 需求分析 + 默认配置+ m8 B0 w, J3 S
9-2 合并配置的设计与实现 - 配置合并策略(上)
7 Z; y9 f- ~8 v: r# W2 z9-3 合并配置的设计与实现 - 配置合并策略(下)
- t. E! I+ G, j' |: o2 @9-4 合并配置的设计与实现 - flatten headers + demo 编写
6 |9 U! c- \1 H4 ] h% ]6 Y9-5 请求和响应配置化- 需求分析+ 修改默认配置" [" y5 H, T$ y0 n, ?
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写
2 ~4 P! n) w6 e" E. ]! X7 Z9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现
. E3 W6 E8 z7 ~& ]4 _2 t. e
# r1 W( H' U! R3 v* a2 H4 C第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】( s8 ~+ ^- [) `9 F" m
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
8 m* q( v/ B& j" N10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
& [* i- i8 d9 [+ W1 D4 T( z; ~/ r10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口
. D" d0 X: @" G S# b$ y10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现
" x* A5 n, q" \9 w10-4 -4 取消功能的设计和实现 - demo 编写9 [4 h0 W4 a0 A- t3 ?
, _9 K. {. |; G5 C& g
第11章 ts-axios 更多功能实现【锦上添花】
* ?$ \) M9 ^$ T实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
7 p s7 Q5 i+ r: H E11-1 withCredentials 需求分析&代码实现& demo 编写1 s1 X( X; R4 @# g3 |
11-2 xsrf 防御 - 需求分析
* J: t4 ^9 C2 O) @11-3 xsrf 防御 - 代码编写- Q( Z) u9 [" w2 `3 d
11-4 xsrf 防御 - demo 编写- l7 c4 L" @: H L, A
11-5 上传和下载的进度监控 需求分析+ 代码实现
. w$ Y) G0 F& s9 Y11-6 上传和下载的进度监控 demo 编写5 ~- U; @# d" t5 O
11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写
2 p6 Y0 r6 ]+ l3 j5 R1 v0 m11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写9 P+ K0 f2 f0 n: t3 ~. M
11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写
) v% b. p) e* K2 \6 Y" z- ~11-10 baseURL 需求分析+ 代码编写 + demo编写0 r0 y7 L. ]3 \) ?! y
11-11 静态方法扩展 需求分析+ 代码编写 + demo编写' O$ p0 \) b- u/ p" E
. U# z0 h/ e4 t6 ^
第12章 ts-axios 单元测试【保障代码高质量】0 x" d2 u2 I% A& `" Y% G
先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%
5 f+ m2 Z3 u3 M3 f+ f( u/ P; E12-1 前言3 w: f+ ~' J) u1 Y
12-2 Jest 的安装和配置 Jest 安装; B) D5 Z4 B# A, K& P+ D
12-3 辅助模块单元测试 准备工作: {8 w8 M4 [* L$ j0 s3 G* ?
12-4 辅助模块单元测试 util 模块测试-
: j- w% w: J3 r# r9 m0 d12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试4 d* Q1 W" s% Q) K4 V1 b
12-6 辅助模块单元测试 headers 模块测试
2 z% |8 p/ I( z12-7 辅助模块单元测试 url 模块测试; E( {5 _6 w" J0 t" O, \% D' o
12-8 请求模块单元测试 jasmine-ajax + 测试代码编写2 S B {. l* v- s$ g
12-9 header 模块单元测试 测试代码编写4 e) @7 a, g" K
12-10 Axios 实例模块单元测试 测试代码编写3 @5 U, x [# O# f, U
12-11 拦截器模块单元测试 测试代码编写& E6 @* o- E- u+ V
12-12 mergeConfig 模块单元测试 测试代码编写/ f5 R( E; y6 [ k* m% D
12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试2 E4 w6 J9 L+ k7 U. R
12-14 剩余模块单元测试 defaults 模块单元测试
" R" }2 M j* t* v- K; s12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试
9 Q1 y2 |* t6 Z6 \: C12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试. Y. M. K: A( j5 a1 z
12-17 剩余模块单元测试 补充未覆盖的代码测试
^/ w* W" R% u- q; B9 [. O- T* Q) i
第13章 ts-axios 部署发布【向社区分享你的项目】
0 X A& b1 A& q: n8 X$ y. J讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。
0 d! p. `3 w- I6 B% k3 G8 I0 T13-1 ts-axios 编译与发布 需求分析 + 编译和打包
, T' T# }% Z! G- k% z4 e+ q. b" B13-2 ts-axios 编译与发布 自动化部署
0 w* i& F3 P5 Z6 X8 z13-3 ts-axios 编译与发布 运行部署脚本9 G6 b4 B; P, @* e1 A
13-4 ts-axios 库 在 TS 和 JS 项目中引用" S1 d `$ W4 S/ f) v
9 g3 `; o" e' [; @: C6 Q
第14章 课程总结【知识梳理,巩固加深】3 C, A( s* K$ N1 m
本次课程的整体回顾,总结学习的内容。
7 R& n9 w" ^# n14-1 课程总结 与回顾
# d5 y5 \# P0 h# u2 W/ u$ [9 C- @
9 U( o9 W/ R6 w6 }+ ?" l〖下载地址〗8 F- _; O5 z% N& m7 \
4 Y* {, L4 x2 I* H- l5 @+ t3 p
) A! I) j- V, z; h1 @3 j; y4 k! L' c5 i
|
|