5 w3 Y7 E2 d+ S
; |1 N2 q( d" ]6 o* [, F/ i; }" g
〖课程介绍〗1 \8 R5 h0 K6 s! r& m, s6 l
TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
# g) [0 H# N5 E, y4 x" E' \$ r8 I1 k3 o
. E+ J' q* ~7 b. P/ ?〖课程目录〗
. {. f1 x A; Y' G; q5 X第1章 课程介绍【悄悄告诉你,一定要看,有福利】7 B, k: X, i7 P! z
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。2 n- E9 _# @$ q' D& i! h. n
1-1 课程介绍 试看
9 T7 s6 b# Y2 O
7 t# ~ X$ [5 X6 E% c' L第2章 初识 Typescript【初次体验】
s& B/ G, L D( X教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。
1 B* e7 P3 z: w9 k2-1 安装 TypeScript& G/ m" F7 K2 O2 S; U
2-2 编写第一个 TypeScript 程序 试看
5 \2 k X. h/ A8 v) R6 z- g# w$ B7 p! O! X c- |" I
第3章 Typescript 类型系统【必备基础,牢固掌握】8 r7 V* U" m: [4 X! o8 z
参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。2 Q$ M0 S" b+ |4 |4 p
3-1 基础类型(上)
4 {3 v2 `5 r7 E* e4 q8 Z3-2 基础类型(下)1 u$ X7 r) @+ G& ]8 ]
3-3 基础类型(注意版本报错问题)* p; o6 g' Q* C# \$ a& A
3-4 变量声明 - var 声明
, ^- ~, z% { D1 h$ E- u3-5 变量声明 - let 声明
# E2 e) u2 D% W" a" B3-6 变量声明 - const 声明
0 P* s/ |3 X# f* O. h0 Y' R6 x3-7 变量声明 - 解构
$ K( D5 s( V8 U C3-8 变量声明 - 展开
& Z+ |! i: V+ u6 s P4 D3-9 接口 - 接口初探- |- ^5 ?$ d2 N! z6 a
3-10 接口 - 可选属性+只读属性# G5 O: M; s7 K- C
3-11 接口 - 额外属性检查+函数类型+可索引的类型* A1 D3 U( H8 w0 r& P/ [
3-12 接口 -类类型+继承接口+混合类型+接口继承类# a% [' ]( T! w- b/ w L3 U
3-13 类 - 基本示例+继承' [ o- }7 V2 N8 m; h- T
3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符
3 d7 p; z* }. M6 ^9 u/ I7 p+ f3-15 类 - 存取器+ 静态属性8 e, w" c7 E7 N+ R
3-16 类 - 抽象类+ 高级技巧8 A# c' Z3 d5 R
3-17 函数 - 基本示例+ 函数类型1 T |4 V7 l( o' T1 P7 x
3-18 函数 - 可选参数和默认参数1 m" b( O6 K, _1 V5 G }' k& V( }
3-19 函数 - this+ 重载2 S; A# j4 e, a1 Z: F
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型4 F$ W% ^; [) G$ B6 N+ b, Y
3-21 泛型 - 泛型类+泛型约束, {2 } X* U9 R$ D K5 u+ L% o$ h
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型6 S+ ?$ g3 M ?& ^3 O
3-23 高级类型 - 交叉类型) K# Q( D; J; P$ Q8 O, o
3-24 高级类型 - 联合类型0 v; ?% R. t/ }! _' X \* f
3-25 高级类型 - 类型保护/ L( i* \- W" `+ D# K( V2 x
3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型
v' w# E1 \9 R) L }1 x% E' L' m. B
/ y! {+ o2 d; a0 Q0 i+ D( O第4章 ts-axios 项目构建【工欲善其事必先利其器】
+ M0 m8 ]( v. I) Q% Q分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。9 V, i2 e& n2 s* h
4-1 需求分析
. u" F6 U# O& B& [$ c* m# L4 R6 I4-2 初始化项目 - 创建代码仓库3 \' {4 A( O0 t; b* e
4-3 初始化项目 - TypeScript library starter
; t; F0 M. R8 D7 Y- w5 C2 D& W4-4 初始化项目 - 关联远程分支
9 |' S) h/ J5 @! ^- [/ Z: ?0 S4-5 编写基础请求代码 - 创建入口文件8 e+ O( L% m0 Q5 l9 s+ M
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求# z+ g2 w9 I) O: |
4-7 编写基础请求代码 - demo 编写
# q, o! [7 S/ n A; h5 k# E
% S3 q$ V9 B% O8 u3 \第5章 ts-axios 基础功能实现【核心流程】
" ]; p& e# g" p$ |. b, `: e实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
2 C6 I: t9 P' i z5-1 处理请求 url 参数 - 需求分析
9 t/ g( V5 Y/ X& T2 d5-2 处理请求 url 参数 - buildURL 函数实现: c( Z8 |3 e6 c& y9 W# p- r8 u
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑
3 s6 [ n5 b l4 B! u! K6 D$ t) f8 j5-4 处理请求 url 参数 - demo 编写- d$ H- V# E: {( i; ^$ l
5-5 处理请求 body 数据 - 需求分析+ 实现 试看" \' E. Z" v R8 } i
5-6 处理请求 header - 需求分析
X/ r) i7 ]" d, D# _) ~' s5 l5-7 处理请求 header - processHeaders 函数实现+ y7 g" [- ]% U2 o5 Y ^
5-8 处理请求 header - 实现请求 header 处理逻辑
& E2 {2 T( i" W; U5 ^% F* ]3 y$ [5-9 处理请求 header - demo 编写" \, U. V% X+ h% c4 ^
5-10 获取响应数据 - 需求分析+实现' ~/ G0 p" Y! u. F0 B- X3 `
5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用; K9 S$ G0 [5 W& ^, v; H9 U0 O/ A
5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用$ g6 r- {6 i8 X9 T
3 e7 t# i7 A8 e6 J/ v: V8 c6 B2 o2 Y第6章 ts-axios 异常情况处理【不可忽视的边界条件】% j; @1 k6 b5 q2 I1 D& Q1 m, W
处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。. O1 G7 J# b4 J- r9 r2 ?
6-1 错误处理 - 需求分析4 R& r0 Y8 L/ x/ S
6-2 错误处理- 网络错误+超时错误+非200状态码+demo, Z' Z9 V5 j$ N# K4 J
6-3 错误信息增强 - 需求分析* v5 ?2 o" r# X d6 r8 R
6-4 错误信息增强 - 创建 AxiosError 类
; ^, G& C, O% n# X* W% B3 Q6-5 错误信息增强 - createError 方法应用+ 导出类型定义6 S' Z7 C- l3 p
1 d0 c- C; n) J2 r) \/ t& l% F$ r第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】# a" F/ r4 ]" p( p* D- c G. B
把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。
9 }! D; N3 {+ }0 A7-1 -1 扩展接口 - 需求分析6 t9 v4 y* j A y
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类
9 Y: M% G) v7 l2 Q* b7-3 -3 扩展接口 - 混合对象实现+ demo 编写
4 T, o3 v l9 d. ~5 V7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写
8 ^% R' v% h3 ^9 P1 ^7 \7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写# u! h8 h; B% K1 X8 a; [( G/ o
. E3 M$ R/ m! v, y. P/ L0 M. U第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】0 H* I H5 J9 D$ }8 k$ Q
实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。
/ q7 C& l" h8 m5 n% J5 b8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计: ^8 ~, F% h( M, F2 p* c: N1 U6 q. e
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现4 V% W1 A% |: J
8-3 -3 拦截器的设计与实现 - 链式调用实现) Y: w1 G, D) D/ D4 f
8-4 -4 拦截器的设计与实现 - demo 编写% f/ [% n, Q; U' N$ J* z, |
/ S+ b, ^; v5 h6 e5 j7 ?4 x3 ^第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】( ^/ A. i2 }' V% S" t
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。& s# K! w3 d8 @4 ^. H; J; M
9-1 合并配置的设计与实现 - 需求分析 + 默认配置, D/ B+ J9 p) y7 P* d
9-2 合并配置的设计与实现 - 配置合并策略(上)
$ T9 k4 K; |# h% ?6 i# C" r$ T9-3 合并配置的设计与实现 - 配置合并策略(下)
: W# m: C! ^( i9-4 合并配置的设计与实现 - flatten headers + demo 编写
6 z% l" L- ?8 R/ R: m9-5 请求和响应配置化- 需求分析+ 修改默认配置) t# r x# X3 C, n6 i& Y
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写! ^. D6 `# \4 @1 T$ p
9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现
: i X3 V# U$ M( v( w! i+ D& O* n. m* y+ f# R2 H3 u- L6 C
第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】! R. ?5 b6 ~0 s2 w
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。# r6 T f3 ?4 R) F- g
10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案+ X p; o! D4 o) w
10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口0 _0 O1 N! p8 s+ ~( o1 Z! \/ f( r
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现& D7 N7 ~6 z5 p- B
10-4 -4 取消功能的设计和实现 - demo 编写
1 C9 \& y# y: E; n0 U( `7 C8 v3 H4 x* S% N
第11章 ts-axios 更多功能实现【锦上添花】
0 J' [/ G' q# C实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。! o* Y* |" [6 |1 a, _; R! m; K5 h
11-1 withCredentials 需求分析&代码实现& demo 编写& p3 t6 j& O9 N' G4 ^8 h& S
11-2 xsrf 防御 - 需求分析8 d$ `9 P( L# f0 S
11-3 xsrf 防御 - 代码编写 Y4 w* D# S5 \: N3 c
11-4 xsrf 防御 - demo 编写
$ u, H0 V9 Q( q. M11-5 上传和下载的进度监控 需求分析+ 代码实现9 q$ @7 y9 f _5 J% {. y
11-6 上传和下载的进度监控 demo 编写
. _9 {9 _0 m7 f11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写5 b4 x: p. M0 R
11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写% e" Z7 x: c+ d8 q9 V. W
11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写
$ s8 T$ S- E3 Q. [11-10 baseURL 需求分析+ 代码编写 + demo编写
6 o9 a- N" O9 E# f11-11 静态方法扩展 需求分析+ 代码编写 + demo编写) s- S' J: }0 [- J, }" G4 S
) T w: G1 ]# E; @$ V; y' |: Z3 n
第12章 ts-axios 单元测试【保障代码高质量】
( ~: I! U* l/ d, ? n" f先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%7 b) S( |: l3 c, D# R9 o( O5 f
12-1 前言9 t, l2 p3 b$ A& S2 _
12-2 Jest 的安装和配置 Jest 安装8 f% f9 w$ ^4 x. R) t
12-3 辅助模块单元测试 准备工作
4 V( h. v9 i* K) i2 @12-4 辅助模块单元测试 util 模块测试-
3 W- P5 A% D: P" m" y7 A! _* H: L12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试2 @. f+ a% q, ^. R( t. I# F- K" O
12-6 辅助模块单元测试 headers 模块测试
9 K/ ]* I: W8 K8 H; G; U12-7 辅助模块单元测试 url 模块测试- W/ p5 k* \: s
12-8 请求模块单元测试 jasmine-ajax + 测试代码编写
2 Y4 f' F) j x, N& N, t u+ b! s( @12-9 header 模块单元测试 测试代码编写
* B" {( @: T A0 `; Z6 m" k2 G9 P12-10 Axios 实例模块单元测试 测试代码编写
. q; D5 Q) o: x) Z. b. K12-11 拦截器模块单元测试 测试代码编写; `, g1 T, D- m$ n- j
12-12 mergeConfig 模块单元测试 测试代码编写" g) m7 |, i P6 u
12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试
. ~3 G3 [1 x" }12-14 剩余模块单元测试 defaults 模块单元测试
) g) x' [" x. R: W$ x# J( X12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试
; E/ X9 T( j0 B6 A {12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试5 M5 G3 m& q! T$ \
12-17 剩余模块单元测试 补充未覆盖的代码测试, Y5 P, |# | l+ t. U2 {$ }3 |) j6 Q' s
" K2 B" s8 M1 s: r$ c- I. F8 q
第13章 ts-axios 部署发布【向社区分享你的项目】3 ?6 C. p0 l# V; Q0 u
讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。! }' ` t8 g5 _* ^1 g5 I, ?! u
13-1 ts-axios 编译与发布 需求分析 + 编译和打包# r/ a: F( v/ x$ w. R4 v! ]* I7 V
13-2 ts-axios 编译与发布 自动化部署
: o% R8 f7 u0 x) u: Z13-3 ts-axios 编译与发布 运行部署脚本
4 `, L7 J$ W/ O13-4 ts-axios 库 在 TS 和 JS 项目中引用! \( X9 Z. y. Y x. @; _- z% W
' i) k: n6 }0 A- c
第14章 课程总结【知识梳理,巩固加深】
& R/ Z/ Y; g4 i$ p0 a U3 A本次课程的整体回顾,总结学习的内容。
9 z4 p( ]7 Q& X5 ?. f2 `0 j14-1 课程总结 与回顾6 S) f6 }8 \2 d' R
9 X& j+ @8 `* @/ v' [& _
/ z- }6 a) M% @: Y. a〖下载地址〗
! g& }) B0 g# K9 E
9 d2 ?. i/ W! t7 X: E& t2 }" e5 D5 d' n, _2 m
+ C2 a! |) m4 F1 }7 I1 R# K
|
|