! e* V) i" t& f& v: Q
* P# V8 T! V' i7 z5 K; L
〖课程介绍〗
$ d* A: P6 A3 ?5 {" \5 n' p TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @ U% j J8 l. v9 O0 R" ]
, y4 x" E' \$ r8 I1 k3 o
- p- @/ ~+ k! {# x( E: g〖课程目录〗
6 i; X- V$ X7 K% G1 X" ^3 _# E第1章 课程介绍【悄悄告诉你,一定要看,有福利】* D# l! c/ \( _- L8 w% F
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。, F7 f, `5 c. r7 Y* h; f
1-1 课程介绍 试看
+ U: x ^# d0 X" Q( ^% L6 i0 t
1 T# u7 H A4 K& k# A* A+ Z第2章 初识 Typescript【初次体验】/ {1 X- j; K8 }) I1 f3 B" `: r
教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。
* ~3 v. T1 D- |6 \3 D" X2-1 安装 TypeScript4 _1 G- e M7 w0 h6 q! W& ^# r
2-2 编写第一个 TypeScript 程序 试看 R# T1 |; M: z& z1 l
5 A5 ]( D4 s4 u7 E4 n$ }3 r
第3章 Typescript 类型系统【必备基础,牢固掌握】
$ j9 W( M" A9 x$ E$ `( E4 i参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。, @' W1 r8 x) a. { O/ Z
3-1 基础类型(上)7 ~% c; } Y t9 c
3-2 基础类型(下)
6 O' W9 D3 p; I. i$ Q a r3-3 基础类型(注意版本报错问题)
% t' t6 v7 g6 m# P3-4 变量声明 - var 声明& a. S9 A1 J4 l- x+ ^; `: J
3-5 变量声明 - let 声明
9 ]. i0 |' [3 o' K5 q1 e8 M3-6 变量声明 - const 声明4 ?& { M4 y/ Y8 q7 ~
3-7 变量声明 - 解构
5 B9 Z# q) N* }3-8 变量声明 - 展开$ [; A( z' |5 U Z! \
3-9 接口 - 接口初探
0 H! a7 _7 C- P7 _; U# P3-10 接口 - 可选属性+只读属性) p R, E5 U- ?" S. |
3-11 接口 - 额外属性检查+函数类型+可索引的类型
4 M n: |5 H* z3-12 接口 -类类型+继承接口+混合类型+接口继承类
& Y C* L. I6 B5 X# t/ K3-13 类 - 基本示例+继承( R1 W, `) H6 {3 U8 m& f! t+ F
3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符
0 v, D8 O! e7 L- J4 y$ Y4 x$ C3-15 类 - 存取器+ 静态属性# L, ~& W' G: d: ^
3-16 类 - 抽象类+ 高级技巧
) a1 T+ v/ N i; k+ }, B: h! T8 K3-17 函数 - 基本示例+ 函数类型" |! a( j" S6 s9 X: ]
3-18 函数 - 可选参数和默认参数9 \0 M, Z; R0 O \
3-19 函数 - this+ 重载2 X% _6 U( \: I
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
3 d- e3 X% L( ]6 P( D, m3-21 泛型 - 泛型类+泛型约束
6 o5 _! {# y5 x; b6 ?- D; \" M v( m8 }3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型" x% c" e9 M7 w- y- _3 w ^
3-23 高级类型 - 交叉类型
( P V( L* C* Z& R5 s0 M3-24 高级类型 - 联合类型
! Q; |0 ~0 G+ _( b+ @3-25 高级类型 - 类型保护
, T5 T+ Y3 A$ m5 t6 D A$ ~& _/ k) ^3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型$ O% R6 j; e7 n r% Q& z$ ~
/ y2 b1 h, {/ Y! I
第4章 ts-axios 项目构建【工欲善其事必先利其器】/ E6 i9 @. Z, ~ J
分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。
! }( C, b0 o6 y4-1 需求分析' R, {0 T2 d, G, M* A% I0 T+ G
4-2 初始化项目 - 创建代码仓库
' X3 R5 Y# W( l4-3 初始化项目 - TypeScript library starter1 x; y: N) @; Q" Y3 F: _
4-4 初始化项目 - 关联远程分支" w$ T$ V9 {& J7 d$ ~8 l
4-5 编写基础请求代码 - 创建入口文件
1 y V- z+ o" M) i, A/ F4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求
% w: R% b* S7 \" W$ a* w7 A4-7 编写基础请求代码 - demo 编写
; G' E7 c% y, u; k3 p; K% t6 G) P1 W
第5章 ts-axios 基础功能实现【核心流程】
2 T1 [7 P$ k/ X; E实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
: x, a% Z8 p, R' @2 j9 B1 H/ C5-1 处理请求 url 参数 - 需求分析9 w- g t0 f% v3 H
5-2 处理请求 url 参数 - buildURL 函数实现( m Y; S1 f" ~3 [# d: s
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑
6 M e& |4 D8 D1 n9 g, J5-4 处理请求 url 参数 - demo 编写5 q6 s! r2 a6 I: a
5-5 处理请求 body 数据 - 需求分析+ 实现 试看
# g9 c% K' c7 i+ T. T8 g6 c* H F5-6 处理请求 header - 需求分析
3 Z6 Y( W6 H" u1 q3 j5-7 处理请求 header - processHeaders 函数实现
0 S( }% T: ]. ?3 G* x0 t1 _- ?5-8 处理请求 header - 实现请求 header 处理逻辑& n8 V: |6 G" m2 } R
5-9 处理请求 header - demo 编写! W& C, t U% O. q& ^: }) \4 f
5-10 获取响应数据 - 需求分析+实现
. ?3 G$ }% d f9 a, O9 J5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用( t# `7 A! }) p n3 `0 h; |- i
5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用
7 L; K0 v; E' E
6 ^* s2 v2 z* j' O; t第6章 ts-axios 异常情况处理【不可忽视的边界条件】
6 e) \% k& ?$ Q7 u处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。4 e) c! ^$ v4 K5 N2 ?
6-1 错误处理 - 需求分析
; Z& T& U; R2 R! l4 `- Q$ O9 H6-2 错误处理- 网络错误+超时错误+非200状态码+demo
7 U4 _1 n% q. t6 u& M! P6-3 错误信息增强 - 需求分析8 S9 @; Q. `7 ?. J* k
6-4 错误信息增强 - 创建 AxiosError 类- r" o% f/ L# S& q2 O M# @; E1 v
6-5 错误信息增强 - createError 方法应用+ 导出类型定义( e, T* d8 l* ?& C7 B$ s$ L
4 e/ h8 f' _0 s0 F5 p+ {' ?, }
第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】
( o s( _) s8 w2 q把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。
6 p8 `$ V9 Z3 [0 i. \' r7-1 -1 扩展接口 - 需求分析) n. G" b p E) G
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类
: e0 Z! k9 z/ @4 u7-3 -3 扩展接口 - 混合对象实现+ demo 编写
* i# f" i8 G; h+ v) O4 C7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写
5 ]) c3 i+ o h: N1 C7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写! [0 R3 `& w8 r" @. s4 G# I( j
5 a$ P( J2 p* L4 k1 ~# P
第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】7 ^; f. O* N1 h" _0 o4 z
实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。* W x2 _: W1 z6 C0 V' @/ z
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计
; j5 ^) s! [ _3 Y6 ]8-2 -2 拦截器的设计与实现 - 拦截器管理类实现
# q. f" [ `- r" L8-3 -3 拦截器的设计与实现 - 链式调用实现" ?9 S8 k' R$ E: X& R
8-4 -4 拦截器的设计与实现 - demo 编写
" ^; ~( `* O% f% j# x% T
/ G8 ^: C+ e! k _9 F第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】& A3 ]" Z, \9 b: a
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。8 g9 Y/ n5 L* `- W- Q f
9-1 合并配置的设计与实现 - 需求分析 + 默认配置
7 T. w- o9 Y4 O5 Z+ ^9-2 合并配置的设计与实现 - 配置合并策略(上)
2 k) T: O [0 f! M' ]: P' Z& b" l9-3 合并配置的设计与实现 - 配置合并策略(下)& a2 b( _3 N* t2 C5 P/ k0 \" s, r7 O
9-4 合并配置的设计与实现 - flatten headers + demo 编写
9 P* b6 i- E, {! X9-5 请求和响应配置化- 需求分析+ 修改默认配置
; ^" L% V$ c4 @4 s9-6 请求和响应配置化- transform 逻辑重构 + demo 编写
& t$ o' [. U/ L6 d$ }( L/ v9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现! t, N% ?' C. H( J$ S
$ m* k% Q- J6 v; G! A- }( Y; r. M第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】
7 h j2 m( R8 q: e实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
" ]& p3 I: p& O# X0 P10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
: s! O1 M8 l+ ?; j: Y10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口4 f( ~8 }1 q: w" Z' D# R
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现* V& R5 q5 z" x! v/ H2 T# G, M
10-4 -4 取消功能的设计和实现 - demo 编写# \) e0 Q1 f: H4 |; A
7 l- i0 Y3 X$ @1 M4 Q8 X第11章 ts-axios 更多功能实现【锦上添花】- j* M5 N, I* O1 J, d
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
2 z7 g# ~$ Q# ~( `: {11-1 withCredentials 需求分析&代码实现& demo 编写
. y& G! K& R0 A2 `4 p11-2 xsrf 防御 - 需求分析4 x7 ?2 K/ Y; N* j- T8 q
11-3 xsrf 防御 - 代码编写
8 {6 ~% l9 M0 A. M11-4 xsrf 防御 - demo 编写
, D0 ^& f6 G( m& _; b$ M3 G$ W6 Q11-5 上传和下载的进度监控 需求分析+ 代码实现
8 |: d# G$ h7 [5 q11-6 上传和下载的进度监控 demo 编写" e1 f3 P" I: ^7 @$ [" D/ p
11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写7 _) `* b, t8 m7 G5 _$ U6 g( ^/ I
11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
m7 _* @' O8 M, {! k11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写1 v" [& _$ Y+ L8 j* @8 d- p
11-10 baseURL 需求分析+ 代码编写 + demo编写' S( ^- _0 C$ @- D" ^
11-11 静态方法扩展 需求分析+ 代码编写 + demo编写6 K0 k1 e3 v, W/ P" C& W
) a) B9 N4 t- W1 l' P; v
第12章 ts-axios 单元测试【保障代码高质量】 H4 Y" b! q' B8 i: s
先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%) O; y: N2 H) a
12-1 前言1 x( ~: e; g6 p; H
12-2 Jest 的安装和配置 Jest 安装
/ |+ i0 }( W" N12-3 辅助模块单元测试 准备工作. p8 s' X D3 _$ G/ {' ?& c. l
12-4 辅助模块单元测试 util 模块测试-
: P+ i: C. \& j7 Y1 t12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试
- {: l/ ^( y8 o9 ?9 K1 ?12-6 辅助模块单元测试 headers 模块测试( s( ~, u0 q" E X* ~9 v
12-7 辅助模块单元测试 url 模块测试
- [2 D7 s+ O5 V: q5 p12-8 请求模块单元测试 jasmine-ajax + 测试代码编写
" l: a( z: c- K6 ^# Q: u1 k, _; B12-9 header 模块单元测试 测试代码编写) y/ S; |1 `( s) h
12-10 Axios 实例模块单元测试 测试代码编写
, z1 U1 A) ]4 E- i1 |) |12-11 拦截器模块单元测试 测试代码编写
' C s& d- R5 T( i( M12-12 mergeConfig 模块单元测试 测试代码编写/ f- s" o9 e2 o- t1 o
12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试6 }$ F: p( U8 a3 A% p
12-14 剩余模块单元测试 defaults 模块单元测试
( Z, W O0 X5 ?5 Q12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试
: |4 I. x7 K0 o1 k; N12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试+ z) X0 A) T/ I: M( M$ P! l: ^" h- t
12-17 剩余模块单元测试 补充未覆盖的代码测试: w( o: @8 c6 q
6 l5 `1 P2 _; s2 r+ N第13章 ts-axios 部署发布【向社区分享你的项目】$ x7 W! s, U2 {& d- K
讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。, o; i6 ~' [% F6 F- |
13-1 ts-axios 编译与发布 需求分析 + 编译和打包5 l' N: C! o4 ]3 s
13-2 ts-axios 编译与发布 自动化部署! n. ^1 x6 c- B* |& A2 f
13-3 ts-axios 编译与发布 运行部署脚本* b2 d/ F/ a1 W% c* F; l. u
13-4 ts-axios 库 在 TS 和 JS 项目中引用
. F- ] E: r" v# q. y
6 W9 I5 @/ _" _* W# K* r( F第14章 课程总结【知识梳理,巩固加深】
- C9 T8 j$ {8 v: D& D本次课程的整体回顾,总结学习的内容。
* e% J4 m4 I- u$ H5 D) {14-1 课程总结 与回顾
' q# j# l' l7 V6 i
! Q$ U% E# A3 O& r0 `
; [9 b- A4 U1 L9 E〖下载地址〗
5 v3 b6 K r' s+ k/ b; w, ^8 V( T9 Z% T% j/ a
$ E8 E2 b+ n$ u: l: i
5 `' e6 G8 o% P! _" Y/ _0 u
|
|