! `- B9 V' Y$ f2 J
" ~4 N/ s5 s* p; X+ ^/ J
〖课程介绍〗
" W+ }1 S& s4 ?, }) @( }! A TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
- a o9 C% c" \. g" b, y4 x" E' \$ r8 I1 k3 o' g! M( _- ~( G2 Y6 k# M K
〖课程目录〗
8 N( G0 t5 Z# J+ m! Z第1章 课程介绍【悄悄告诉你,一定要看,有福利】/ P. @- \* w- _' w2 ^4 ^1 W
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。; `. p# k7 I( L2 P2 C/ J$ ~
1-1 课程介绍 试看4 D" D6 u) H# C6 n! r& I; y
( U) [$ d' j9 i' J; h, Y3 C第2章 初识 Typescript【初次体验】( `5 i$ }& ^2 v( a0 U+ l( @
教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。( m1 N5 S4 m' {0 j- R
2-1 安装 TypeScript' u) N4 e* T' d% W, W
2-2 编写第一个 TypeScript 程序 试看
, y" V! b6 y5 S* n
J: j5 c$ W4 m7 [8 U0 A# @4 P8 P' N$ s第3章 Typescript 类型系统【必备基础,牢固掌握】
: y% J% Z. Y4 W4 Q4 }& B参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。
& R5 e$ @. ~' M. v2 v; G3 M/ [3-1 基础类型(上)1 r( {8 J0 c E8 C d! L9 y! K
3-2 基础类型(下)& k. ?! t" n1 D4 ?# x2 _7 e
3-3 基础类型(注意版本报错问题)9 ]* r( J- m: L4 Z0 U7 ^
3-4 变量声明 - var 声明! L0 y9 I2 Y' I ^. \
3-5 变量声明 - let 声明
" H8 g/ B4 v0 ~3-6 变量声明 - const 声明
h- z, }! b9 v# }/ n3-7 变量声明 - 解构
- O. H' Q x+ Z0 V3-8 变量声明 - 展开! F& i0 t K% l; [# J' n" g
3-9 接口 - 接口初探
" v( n; E' q* G( v! k3-10 接口 - 可选属性+只读属性7 H! P- W" C! r8 ~
3-11 接口 - 额外属性检查+函数类型+可索引的类型4 s' k2 @6 u: `8 `
3-12 接口 -类类型+继承接口+混合类型+接口继承类
3 J4 t% E' B6 ~# s+ r3-13 类 - 基本示例+继承
6 m" ~9 t2 d) V/ T! ~; R3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符) H/ q0 D1 @ G( h
3-15 类 - 存取器+ 静态属性6 l. Z/ ^7 C b* q; u8 q# ]. n
3-16 类 - 抽象类+ 高级技巧
' z- I a. r5 q7 D3-17 函数 - 基本示例+ 函数类型" V/ E# K- s9 M2 C6 U" @/ `8 c7 L
3-18 函数 - 可选参数和默认参数. P+ }6 s' S2 t3 Q8 F" Z
3-19 函数 - this+ 重载; V7 c( l+ B2 y1 q6 J
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
' X* ]$ y o3 k. x3-21 泛型 - 泛型类+泛型约束4 W* _- m& X0 ~; R. x6 Y
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型+ P- {& j- h0 L7 w" J7 {
3-23 高级类型 - 交叉类型
g8 N {3 B9 ~: e( Q3-24 高级类型 - 联合类型 \; I1 d4 R4 N
3-25 高级类型 - 类型保护
* X$ _. F# P" O. V5 Y0 _& ^3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型' Q; q% {: q% J: w# z' e, ?
" \4 X, t1 T: R( w4 K
第4章 ts-axios 项目构建【工欲善其事必先利其器】) E( w7 k6 P' K( e7 x
分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。
- t$ p& N3 m% @4-1 需求分析5 s2 U. o' \- A+ ?4 P' u$ ^6 z& y
4-2 初始化项目 - 创建代码仓库9 z! Z& j' ]) V* M# T1 ]7 G
4-3 初始化项目 - TypeScript library starter
3 l0 r$ W9 ` V6 k4 ^. a4-4 初始化项目 - 关联远程分支
6 c( M* Q+ ~$ [% [* A4-5 编写基础请求代码 - 创建入口文件* J, r d7 p+ z/ [8 e; U
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求9 ^1 J n/ }) o. V% l- r
4-7 编写基础请求代码 - demo 编写% Z' L- I7 {+ ]3 j2 u/ d
" c: a! s8 O. j; v: ]
第5章 ts-axios 基础功能实现【核心流程】' X+ ? n) i4 S% j7 W+ Q
实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
* S+ ^; q: b& \ \! m, C' I1 t5-1 处理请求 url 参数 - 需求分析
6 K% R# n4 B! d% }# Y3 `5 s5-2 处理请求 url 参数 - buildURL 函数实现
* s! B* w, }% G) C5 w5-3 处理请求 url 参数 - 实现 url 参数处理逻辑: N& ]8 x( E! V% t; g5 r
5-4 处理请求 url 参数 - demo 编写
4 y; f3 W; t& G* L- z2 z5-5 处理请求 body 数据 - 需求分析+ 实现 试看& f# O+ o& a4 i' v4 r" @
5-6 处理请求 header - 需求分析; H0 Z+ M+ y" U* _6 c
5-7 处理请求 header - processHeaders 函数实现: x" f7 Z' d( }# b: I+ o- T# g9 e0 G
5-8 处理请求 header - 实现请求 header 处理逻辑
4 M" E1 x8 C, O; b: M5 J. B8 [5-9 处理请求 header - demo 编写# H" j0 B ?* A: @4 O ?
5-10 获取响应数据 - 需求分析+实现
: T9 ]6 S7 g' N) A7 a. g5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用7 O5 Y. t0 ^. U! U
5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用
( g/ z* h* g- d8 f! h; o1 O7 W; T
9 ?$ U* ?1 G/ X7 e第6章 ts-axios 异常情况处理【不可忽视的边界条件】
* x" H0 n, f: D0 Z$ L9 N处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。& o1 U5 C# b$ G7 U
6-1 错误处理 - 需求分析" w9 K; D; W2 }
6-2 错误处理- 网络错误+超时错误+非200状态码+demo
E! o5 c* q( ^$ b6-3 错误信息增强 - 需求分析
3 m8 e6 X+ h. d l% U/ \6-4 错误信息增强 - 创建 AxiosError 类( s+ P1 o' Z5 m% m' i0 E
6-5 错误信息增强 - createError 方法应用+ 导出类型定义- A. p. n* K" v$ s6 C
7 p& A. V- \; T: Y! D: u) v7 h% r
第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】+ b/ H0 U/ `- K# n1 d
把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。1 e7 {0 K. n( x2 t
7-1 -1 扩展接口 - 需求分析
, f' s5 B/ v) b' D* ^7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类$ r+ \' U1 u4 t% ]0 f
7-3 -3 扩展接口 - 混合对象实现+ demo 编写$ ^, }. j4 i( O# Q
7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写; l4 a+ W# s! I" P6 a! P
7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写
( c$ A5 y" R- a/ B; N5 ?
6 I* O: R0 Y/ u6 T第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】" w0 O+ [3 `5 F) v, F6 [
实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。
6 {2 M4 M1 H$ M& w( g* V4 u8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计) r6 B# R: o& s7 _1 j8 J0 N, T
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现) F+ {/ F% p! c3 H* h7 ~1 ^7 F' \
8-3 -3 拦截器的设计与实现 - 链式调用实现% q- Z a+ l/ }1 O) h
8-4 -4 拦截器的设计与实现 - demo 编写
. T8 L: x, ?9 h" |4 z1 o! O0 s; ?# x) @! D$ G3 n2 x
第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】2 r1 c5 r2 C1 N/ r: J4 C
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。) k2 X/ s$ K4 F+ k* D* @2 i3 ?
9-1 合并配置的设计与实现 - 需求分析 + 默认配置$ n# S$ p& t1 o3 \
9-2 合并配置的设计与实现 - 配置合并策略(上)
; E w1 F0 e% E2 Z0 ]% o9-3 合并配置的设计与实现 - 配置合并策略(下): v* J E( z$ J+ r {% S
9-4 合并配置的设计与实现 - flatten headers + demo 编写 E; F7 C6 g8 _, t9 g% D! {3 {
9-5 请求和响应配置化- 需求分析+ 修改默认配置! C) g" I) Z2 f4 x9 i& A
9-6 请求和响应配置化- transform 逻辑重构 + demo 编写# Y' ]; I, }& Y1 Z' ^5 e7 V
9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现/ w- o# |2 ]$ u$ u9 Y
$ k8 v: ^& |, i, i
第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】
1 z; v' s& [& |) \7 l实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。
; G- T: f4 A9 \0 u+ t- O10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
% `6 t, z" g0 I* ^. [4 n7 o10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口% H6 ~3 j. P: |' C
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现
~% A; ?4 q5 j* ~$ ^4 z10-4 -4 取消功能的设计和实现 - demo 编写
1 O4 `/ l) t& Z& L8 A6 N& r; o E2 t3 |( q" f6 B% V
第11章 ts-axios 更多功能实现【锦上添花】5 V% ]8 B8 Z* s/ }$ F s
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。
9 C& W6 l4 Y0 g2 p9 N& d" H/ k11-1 withCredentials 需求分析&代码实现& demo 编写- y0 J6 _' q/ ^/ c2 q4 @$ ?8 w! U6 c
11-2 xsrf 防御 - 需求分析
6 J( C9 K8 n8 Z7 `( n+ f: c2 o+ g. M11-3 xsrf 防御 - 代码编写7 `2 ~7 f/ F0 T/ u& E! ?6 e
11-4 xsrf 防御 - demo 编写
% c: k! Z" S/ N$ ~% M# i11-5 上传和下载的进度监控 需求分析+ 代码实现
) o3 {+ e9 o2 X& Q& I: n1 v11-6 上传和下载的进度监控 demo 编写9 Y7 Q. l) D( U* ]8 q5 P: c
11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写$ ]$ x% I6 l6 M8 R
11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写/ j6 q+ ]- A* p( t& s
11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写! L) x* A! A$ I- f
11-10 baseURL 需求分析+ 代码编写 + demo编写
" x& y' L- v) x2 Y" f! ]11-11 静态方法扩展 需求分析+ 代码编写 + demo编写 K, [( i9 j6 o7 \& _. Y7 J/ {
; k0 T. |; s+ l
第12章 ts-axios 单元测试【保障代码高质量】5 A. V% F2 X' X9 d) O7 o- B
先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%
0 q& w6 K; @7 O* |$ D7 N12-1 前言
+ g# M A2 x9 {12-2 Jest 的安装和配置 Jest 安装6 _, W' q9 l0 u- M
12-3 辅助模块单元测试 准备工作/ x; [7 G" f+ H R& m1 g
12-4 辅助模块单元测试 util 模块测试-
8 q8 @$ D9 q: T5 f P$ I+ L1 X! u12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试% ?( U, `" j: Q1 r
12-6 辅助模块单元测试 headers 模块测试
* O" G: p5 e/ @+ B- h% ^12-7 辅助模块单元测试 url 模块测试
- W, s5 U- \; t' f6 ]0 u3 r9 `, g12-8 请求模块单元测试 jasmine-ajax + 测试代码编写6 F8 L6 R# c* m+ ]1 v( ~
12-9 header 模块单元测试 测试代码编写
/ e1 G$ ?0 ]8 H5 b9 L# W12-10 Axios 实例模块单元测试 测试代码编写0 L9 [8 V( D. e5 _8 e% W; n
12-11 拦截器模块单元测试 测试代码编写% i+ C+ @: B6 M4 B
12-12 mergeConfig 模块单元测试 测试代码编写
% j/ I. C# h8 u8 {" X" {12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试/ ~- r1 r2 M0 @2 L, Z( Q, L5 M
12-14 剩余模块单元测试 defaults 模块单元测试
7 ^2 O! b! M3 {% X ?12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试& u4 t4 ~! h1 Z+ x1 O% o. X$ B
12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试) T; ~% v6 `: R5 j( L2 N
12-17 剩余模块单元测试 补充未覆盖的代码测试$ P3 D+ S/ d/ r
3 t9 G& r1 [/ H9 s3 V$ h4 g7 `第13章 ts-axios 部署发布【向社区分享你的项目】
! P, X2 ~: Q" Z( x& e讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。
+ h# B% v8 W5 r. d) ~- x" ~13-1 ts-axios 编译与发布 需求分析 + 编译和打包9 ^: M; L9 f4 z9 R0 s1 M' h0 [
13-2 ts-axios 编译与发布 自动化部署( g/ ?( `0 e5 b. C
13-3 ts-axios 编译与发布 运行部署脚本5 ^ x" H& A% A3 ~. _) U' X
13-4 ts-axios 库 在 TS 和 JS 项目中引用
3 F! X" }' ?* n5 F. M: G) J3 S( s9 U" `
$ j) `" n& c& K6 }第14章 课程总结【知识梳理,巩固加深】5 a/ ~7 f. v% [5 C
本次课程的整体回顾,总结学习的内容。
4 \4 `. ?# _1 |4 e* f14-1 课程总结 与回顾4 L3 {% }: v4 V& L8 G( J" B1 l
0 w; A" d$ F& B) k& S4 F8 _* {4 r1 c1 V L9 s3 F
〖下载地址〗6 }2 X& o( y5 t+ F4 z6 Z
! t! j: }1 g+ R2 \8 [- k/ y& ^+ c, X" {0 |. U9 \
! e. g5 v; |' [) M# o- P6 s. C
|
|