7 F) g: \( i6 H/ `% H1 o0 Y
4 l. D2 ^" W& w〖课程介绍〗
6 e5 h& A Z, t, A TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
& K9 ^4 w+ V# [# K, y4 x" E' \$ r8 I1 k3 o
1 b0 p# _5 \1 W ?# P〖课程目录〗
# ^6 E3 D! M- P# Q' Z% J3 ], y- ?第1章 课程介绍【悄悄告诉你,一定要看,有福利】
6 M$ k; F: b% p4 ?% C介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。
* C9 u7 \1 j( A1 S3 r1-1 课程介绍 试看' w' T- Q# F# i! C9 ~. G
8 c5 `; j# {3 C% V( u9 F! t) c第2章 初识 Typescript【初次体验】7 _- K7 b9 V- z6 A' _
教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。
( t+ |* R' L% I; z; ~9 X) P2-1 安装 TypeScript+ T6 M8 ?: p8 Z/ H
2-2 编写第一个 TypeScript 程序 试看$ O- H4 J% e# r1 W5 C0 s
- K& R, S4 u1 _第3章 Typescript 类型系统【必备基础,牢固掌握】
( B/ Q" M6 \: v7 X6 F参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。
0 {( h+ \8 W! {* M d' e3-1 基础类型(上), K: _& {. |5 P3 O
3-2 基础类型(下)( O/ J% K$ b% G: s4 o# P/ O8 y0 m$ N
3-3 基础类型(注意版本报错问题)8 ^- y7 c0 f, P8 x; _; A
3-4 变量声明 - var 声明0 j' y- p& @0 f/ H/ N8 N
3-5 变量声明 - let 声明
& ~" [8 Z5 W5 y( L8 M1 D: r4 C3-6 变量声明 - const 声明
8 |* B$ N/ @$ Q3-7 变量声明 - 解构$ Y M; O T# p/ S- m
3-8 变量声明 - 展开! a; K k+ P, ]' y1 e
3-9 接口 - 接口初探# O- B1 c: ]* a! h+ R7 y
3-10 接口 - 可选属性+只读属性
. l8 v! m3 D8 o7 U m3-11 接口 - 额外属性检查+函数类型+可索引的类型( ]& \: g7 }" T0 s4 b& D0 v+ i
3-12 接口 -类类型+继承接口+混合类型+接口继承类
# t$ Q3 j. B O. S; G& z3-13 类 - 基本示例+继承
p& b9 e3 I9 t; r) ^5 ~3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符3 Z: d% \* h7 U$ d
3-15 类 - 存取器+ 静态属性* W6 T7 m7 O7 a/ x E$ }
3-16 类 - 抽象类+ 高级技巧9 E4 y4 e$ {' _, f
3-17 函数 - 基本示例+ 函数类型
0 D. }5 U, o4 a3-18 函数 - 可选参数和默认参数
" ^2 i/ r- s* j- q3-19 函数 - this+ 重载
K' u% [! n" b2 @6 O3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
0 f% e# v1 f$ w& R: A1 \ _, ^3-21 泛型 - 泛型类+泛型约束
& ]8 n% j5 ]( k4 W1 {4 k& |) b* k3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型
/ B" S4 y& |, w- v, ]6 J3-23 高级类型 - 交叉类型$ j6 W2 x# }0 r7 _) s$ g5 q; M0 E
3-24 高级类型 - 联合类型
- N3 c! }* ]2 X, h& r1 U* @3-25 高级类型 - 类型保护2 J$ `) a9 S9 E" I( w% S1 H8 y3 n
3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型5 _0 R' i5 \4 u9 u6 f; V8 W
) Y4 V- h, x4 n& {, y, i
第4章 ts-axios 项目构建【工欲善其事必先利其器】
: \, G9 Z% [; s2 T分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。% E8 M* y& N" h) ^: z
4-1 需求分析
# `- Y# \9 g1 U7 f( y1 h4-2 初始化项目 - 创建代码仓库( K: W7 M% {2 J3 [
4-3 初始化项目 - TypeScript library starter7 ]5 X$ j1 Z+ `
4-4 初始化项目 - 关联远程分支
/ @- @% K' H* S) R% H: w# K! ^6 X4-5 编写基础请求代码 - 创建入口文件5 |, J* B6 z1 y" {$ Z8 E- l N+ j
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求
, I$ h% a' K6 @, I4 p5 j4-7 编写基础请求代码 - demo 编写5 T& e( y9 _! O$ G4 s. k
* p% `9 J5 V2 c3 w第5章 ts-axios 基础功能实现【核心流程】
4 l+ Z0 d3 u E: Z实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。8 a N; g/ I( {) m1 x
5-1 处理请求 url 参数 - 需求分析( x0 i* E! E' S- ]9 k8 T$ D( c! I
5-2 处理请求 url 参数 - buildURL 函数实现
: U/ H0 Q1 k( S0 O& Z5-3 处理请求 url 参数 - 实现 url 参数处理逻辑! l7 L! i8 g) O
5-4 处理请求 url 参数 - demo 编写
- D4 s- V/ [* ?( P' Q: X7 K2 B5-5 处理请求 body 数据 - 需求分析+ 实现 试看
9 R. J6 W; A9 k; f5-6 处理请求 header - 需求分析
" j, K# q+ Y( V5 `( X; s! s: _5-7 处理请求 header - processHeaders 函数实现* }" S: Q/ y& ~1 J
5-8 处理请求 header - 实现请求 header 处理逻辑
5 C A, P) f8 A+ f8 x5-9 处理请求 header - demo 编写8 y( F, k6 b; F# c# x
5-10 获取响应数据 - 需求分析+实现* J* K7 E2 B* s2 L
5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用2 j7 Y& M) Q0 z9 s* U: b* K4 n
5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用
" _$ i7 B+ t% r: P8 O
$ l2 S" L5 `3 o, ^第6章 ts-axios 异常情况处理【不可忽视的边界条件】
4 k8 | A7 j! w5 S0 \3 h3 }处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。4 _& X' N% e/ b; K3 x
6-1 错误处理 - 需求分析
3 W5 X l! P+ T; J6-2 错误处理- 网络错误+超时错误+非200状态码+demo0 _! r3 w, `3 @/ I( ^
6-3 错误信息增强 - 需求分析
1 d4 f# w& q4 z6-4 错误信息增强 - 创建 AxiosError 类
7 [0 d. Z4 O, t; X6-5 错误信息增强 - createError 方法应用+ 导出类型定义& O: ]- I) Q. N! T' e1 f
, h. t; f1 V* {1 e第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】
M& Q9 {4 \' `4 @( E把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。
- t4 c* y* b. \) H7-1 -1 扩展接口 - 需求分析, T" T: _3 t* V8 p$ M( l; A$ \
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类$ o$ p, Y( }) _( w2 a7 g2 ^5 y
7-3 -3 扩展接口 - 混合对象实现+ demo 编写& r. ~0 p5 O9 m+ X2 w
7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写9 P3 w0 e0 m9 g4 h9 U) Y& h# [9 J
7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写9 j: l- x. ]/ d% G9 B
4 Q! |+ |7 S& _2 U7 z( a r( y! u2 ~
第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】# D4 C* H9 R6 r) f3 T5 e; f4 N
实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。
% ^! M1 v4 F$ S7 a: ~8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计% N; B7 m$ a' N* { |
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现/ d3 o$ N- P1 W0 Y0 m+ p
8-3 -3 拦截器的设计与实现 - 链式调用实现! \7 u' p5 Y5 ?3 G) K/ Q8 R6 {
8-4 -4 拦截器的设计与实现 - demo 编写# V R/ _ \% _0 J$ a
2 X( H4 _+ m- O# Y
第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】
4 _, j( {: O. d6 K& Z: U让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。, t/ C2 R8 C) V% r! T0 E* X8 A
9-1 合并配置的设计与实现 - 需求分析 + 默认配置
; l/ r, V7 Y/ G+ M# N0 h9-2 合并配置的设计与实现 - 配置合并策略(上)5 r; e4 I1 z }6 p+ F" [2 N1 X
9-3 合并配置的设计与实现 - 配置合并策略(下)
: _; c$ u- E7 D! ]" `# F9-4 合并配置的设计与实现 - flatten headers + demo 编写
$ A: P) x$ o5 ?! O- O6 u3 u9-5 请求和响应配置化- 需求分析+ 修改默认配置 F8 K1 f7 R* Y X0 w1 q
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写3 |) @. Y. z9 P* [' l
9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现; P! y, z- ]' W
, B/ h6 ]; o% s+ D% j2 ^ y4 h d4 y第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】) L& Z& Y8 A+ v0 X5 G/ O( _
实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
9 d5 j' \" ~/ _10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
" W' Q8 o! X& R/ X* H7 d10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口
+ G$ q8 W, ?2 i' u: e. u10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现2 x- @: E' q. v+ a
10-4 -4 取消功能的设计和实现 - demo 编写
7 {! N8 m9 b0 y7 x- Q, b1 n
7 i6 N8 K/ i8 e' P( }第11章 ts-axios 更多功能实现【锦上添花】# M; S$ J+ j2 C. O
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
% c/ f9 k h/ E j6 }9 o9 S# v f11-1 withCredentials 需求分析&代码实现& demo 编写
" u( T9 B. y1 g6 c11-2 xsrf 防御 - 需求分析
, `6 H& ^" u0 J+ X+ V Z; }" i/ o11-3 xsrf 防御 - 代码编写
7 v$ t/ V, H3 t3 O11-4 xsrf 防御 - demo 编写
/ W$ V% q+ q; l# I, z; S11-5 上传和下载的进度监控 需求分析+ 代码实现
; V' V x. m% v' _; y11-6 上传和下载的进度监控 demo 编写
- C E+ V) J8 N) m11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写3 I# j; A! p/ f; ]- O
11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
8 r7 X' _+ y6 R% o( h8 Z& X+ Z11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写
- a/ J C+ A! {* b1 U2 a3 b2 X11-10 baseURL 需求分析+ 代码编写 + demo编写* j9 t* d# `0 m% z1 N
11-11 静态方法扩展 需求分析+ 代码编写 + demo编写: S& H$ O( ^8 F/ i6 c$ T1 V) L( q
* u2 j2 t0 j! E8 X. Z# r. i/ p第12章 ts-axios 单元测试【保障代码高质量】
" V- W+ b n" `2 P先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%6 R, n% b5 |! B& R3 x# N1 `1 x
12-1 前言! C8 _6 d d8 D0 h$ a; G
12-2 Jest 的安装和配置 Jest 安装
& N4 m& ~+ |( B; K6 M12-3 辅助模块单元测试 准备工作4 \% o! W* ^- |+ d
12-4 辅助模块单元测试 util 模块测试-
7 s+ p5 Z, V! c6 k5 U u12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试
4 [+ Y0 o; {' Q+ |: O12-6 辅助模块单元测试 headers 模块测试0 @2 y7 M* K: c, R! o- s! ?
12-7 辅助模块单元测试 url 模块测试) \+ k& t9 j: V' _$ f% V, U( e
12-8 请求模块单元测试 jasmine-ajax + 测试代码编写4 W2 k1 N9 C0 m0 e. G0 W
12-9 header 模块单元测试 测试代码编写
8 Z+ b( n% p2 o12-10 Axios 实例模块单元测试 测试代码编写
/ l j- l6 n) }+ `12-11 拦截器模块单元测试 测试代码编写1 {+ @! T, O0 i7 \
12-12 mergeConfig 模块单元测试 测试代码编写0 f; i; G( t' y) u" d
12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试
/ V) q. e3 G# ~' x$ ^( ~12-14 剩余模块单元测试 defaults 模块单元测试! Q9 `6 p8 A* ?( {0 ]: B: {0 t
12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试
) b& O* v# ~$ C! t2 T: y12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试: u/ V: X' s. G
12-17 剩余模块单元测试 补充未覆盖的代码测试! X- ]: z; k5 E! C1 |
5 q$ w& |+ k3 C, @5 M
第13章 ts-axios 部署发布【向社区分享你的项目】
+ [% y5 R7 \2 t6 t讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。7 \% [* C+ z) f. g0 {
13-1 ts-axios 编译与发布 需求分析 + 编译和打包
" q) e% w3 G3 d9 }/ ^# j' }13-2 ts-axios 编译与发布 自动化部署
" `1 c( W' z4 b$ r13-3 ts-axios 编译与发布 运行部署脚本
+ ^: ]5 l {. V+ x( B* P: t13-4 ts-axios 库 在 TS 和 JS 项目中引用& ?& o K. i8 C9 Y% ]3 S9 b, O
?; I" \; c' m! T
第14章 课程总结【知识梳理,巩固加深】! f" r' B" O8 F# t' m8 y3 O/ Z
本次课程的整体回顾,总结学习的内容。( P5 R- B( E5 u& P2 D+ w
14-1 课程总结 与回顾
0 ^- a1 J E5 _8 k/ e- p" W- V, w1 k# N
& a. [& o% ]+ W〖下载地址〗! N+ q4 y* A! D) s7 U
3 p+ f9 P& {' s( z4 s$ Y1 A8 k
& Q9 @' N Z, ]4 W. m
6 O' ^. E3 @3 s8 b& e5 @! j |
|