& S" u7 w0 j7 F/ K C
) w9 K( S( ~: y〖课程介绍〗; m! ]1 U% ?) Y7 @8 h
TypeScript是前端的发展趋势,但是很多同学却缺少实战经验,而且市面上缺少TypeScript 的实战课程。本课程首先讲解TypeScript的一些基础语法和常见用法,接着带同学们使用TypeScript一步步去实现一个完整的axios JS库,然后进行完整的单元测试,最后把开发的JS 库打包并发布到npm上。通过课程学习完全掌握axios的实现原理,修炼原生JavaScript内功,提升个人职场竞争力。9 C; A; B9 |' b6 Q* ^, I% @
1 G) D) x/ m/ b' H# }, y4 x" E' \$ r8 I1 k3 o2 `' K! |5 _* \; C
〖课程目录〗
8 ~! Y+ E+ r$ a第1章 课程介绍【悄悄告诉你,一定要看,有福利】+ \# T( B8 w+ q6 \, o
介绍本课程的主要内容,通过本次课程可以学到的知识点,学习方法介绍。" b& o& x) j1 h; T7 k# X
1-1 课程介绍 试看
" y0 ?0 t1 }4 y& K4 |9 K# Y/ _- W4 r8 V4 X2 |
第2章 初识 Typescript【初次体验】$ J9 [! F+ M- f; M
教会同学们安装 Typescript 编译器,以及通过编写第一个 TypeScript 程序认识 TypeScript。) b5 A6 l9 J6 l | W
2-1 安装 TypeScript
( \2 e! n9 P6 C/ T- k7 h& D) B6 |% F2-2 编写第一个 TypeScript 程序 试看 u) k9 h8 j2 ?7 r
" ], J$ h- P1 v s O b
第3章 Typescript 类型系统【必备基础,牢固掌握】 S* i5 y2 A3 \- T
参考官方文档,主讲 TypeScript 的一些重要的语法和概念,并配合一些具体的代码示例辅助说明,帮助同学们了解 TypeScript 的常见用法,为之后的实战打下基础。
# H% V9 J; Y9 y$ R2 X& j3-1 基础类型(上)
- g, U6 u$ _ {3-2 基础类型(下)
$ l4 T/ O# q) B' j3-3 基础类型(注意版本报错问题)
( @! g; i1 t Q" W9 w3-4 变量声明 - var 声明
/ ?' w' I5 k9 j: s r. |" b. _3-5 变量声明 - let 声明* f: F* J9 \% `5 r* L& j2 v( h
3-6 变量声明 - const 声明7 e% K! ~3 I- f* d' l0 @
3-7 变量声明 - 解构7 J" G; j" e( D. Z( Z* m" U
3-8 变量声明 - 展开( X2 q' U; W( f1 o. l
3-9 接口 - 接口初探
3 \( n- M" C( O$ f8 ]8 t* A3-10 接口 - 可选属性+只读属性2 C& F/ _9 y$ `1 x9 G9 @( n q
3-11 接口 - 额外属性检查+函数类型+可索引的类型
w3 j% {: E, n3-12 接口 -类类型+继承接口+混合类型+接口继承类
/ O% ?: T7 X. }' ]* ?- _1 o, S3-13 类 - 基本示例+继承6 p) K9 p* X# A
3-14 类 - 公共,私有与受保护修饰符+ readonly 修饰符& j) q2 y* B6 P: n$ p! [
3-15 类 - 存取器+ 静态属性
0 Z6 \7 B; J9 E% f* g- ?3-16 类 - 抽象类+ 高级技巧
- U6 u* W+ j! ?3-17 函数 - 基本示例+ 函数类型
4 ]) I' z6 v; Q: p3-18 函数 - 可选参数和默认参数
7 P3 m# u U- C, L' b3-19 函数 - this+ 重载: l: f2 \1 v* ~- T0 _: U# ]' j" |
3-20 泛型 - 基本示例+ 使用泛型变量+泛型类型
7 f2 Y/ K; H) _8 @. D$ X3-21 泛型 - 泛型类+泛型约束' L$ K; V* ~& v; x% w$ q/ `
3-22 类型推断 - 基础+ 最佳通用类型+ 上下文类型
+ Y1 T3 z. m A. f, I$ R6 v: l3-23 高级类型 - 交叉类型0 ^( ^; d7 p# b3 L, \0 N& M8 ]
3-24 高级类型 - 联合类型, I. W$ V2 s/ }/ ~! |8 r+ ^
3-25 高级类型 - 类型保护
J) _. n# ^% F& B: q+ N: U3-26 高级类型 - 可以为 null 的类型+ 字符串字面量类型
9 c. l6 {5 J' ]( P; `$ d
8 X% {+ Z# \ p6 X% c5 L5 j第4章 ts-axios 项目构建【工欲善其事必先利其器】% ` c0 t- G+ u: ?% n
分析 axios 项目的重构需求,使用 typescrpit-library-starter 脚手架初始化项目,并编写基础请求的代码,搭建整个 demo 的架构方案。
1 U, r Z1 G0 _# ]( V' ~- E8 a4-1 需求分析% y" T5 P4 q8 ]4 z0 m) k( P
4-2 初始化项目 - 创建代码仓库4 G' i q$ h- u8 G8 A
4-3 初始化项目 - TypeScript library starter1 z1 e: R2 }1 s9 J
4-4 初始化项目 - 关联远程分支( q+ m, u' A% R; |
4-5 编写基础请求代码 - 创建入口文件7 ]' Q% q7 l8 g( j7 x, l6 ?
4-6 编写基础请求代码 - 利用 XMLHttpRequest 发送请求
! @/ Q3 t5 S; Y& e3 D* g# h4-7 编写基础请求代码 - demo 编写1 Z$ \7 [, M" b) ^$ q d9 J1 V
$ H; L' X2 e, f3 t
第5章 ts-axios 基础功能实现【核心流程】
$ \. K/ i6 b% E/ W# y y实现 axios 的基础功能,包括对请求 url、data、header 以及响应 data、header 的处理。
0 \" c* c, [$ @4 I8 C% K& w5 Q2 ~, d& T5-1 处理请求 url 参数 - 需求分析0 ^4 C7 f x/ @& @3 d# h
5-2 处理请求 url 参数 - buildURL 函数实现' `, n$ R! O! h6 s0 a2 C+ H: C
5-3 处理请求 url 参数 - 实现 url 参数处理逻辑
& f/ J. v7 \- {. S: f5-4 处理请求 url 参数 - demo 编写
+ x" j0 c. U9 |# z5-5 处理请求 body 数据 - 需求分析+ 实现 试看
. l& {* C' D: P, R7 A5-6 处理请求 header - 需求分析
" U+ Q/ V4 \. N$ |; p5-7 处理请求 header - processHeaders 函数实现
/ |' i- ^4 `' L5-8 处理请求 header - 实现请求 header 处理逻辑8 B% l' U$ j% l5 Q( L
5-9 处理请求 header - demo 编写4 M* ]6 j! a' C! d. @4 x
5-10 获取响应数据 - 需求分析+实现& s/ ?. L# c/ |$ q/ d. i0 i
5-11 处理响应 header - 需求分析+ parseHeaders 函数实现及应用. s5 r V8 z2 x" m! I/ P4 G- a
5-12 处理响应 data - 需求分析+ transformResponse 函数实现及应用0 S8 }# C8 l2 k- q
4 ?" Q& S6 l( l* V4 A; W
第6章 ts-axios 异常情况处理【不可忽视的边界条件】5 q; x, ^( t2 A7 g9 Q* I
处理 axios 请求的一些异常情况,包括网络错误、请求超时,构造一个信息增强错误处理类。
, a6 t' J( ~1 i2 E1 T6-1 错误处理 - 需求分析% r! u$ o5 ^& P, @
6-2 错误处理- 网络错误+超时错误+非200状态码+demo3 ?. b1 g: P$ f6 T& |; J* v. `; {
6-3 错误信息增强 - 需求分析) s% j) G; O- N4 I
6-4 错误信息增强 - 创建 AxiosError 类
* U: P+ X: Y- l. R6-5 错误信息增强 - createError 方法应用+ 导出类型定义# k6 X& m# y* W$ x: M
, ^/ M" D# K$ A# K2 T5 m8 c
第7章 ts-axios 接口扩展【工厂模式的合理运用,设计思想的转变】
& D% E2 j; H4 j6 T2 c把 axios 从普通函数实现到通过工厂模式类的设计转变,并扩展更多调用接口,把 axios 变成了一个 混合对象,以及让响应数据支持泛型。& h/ p, U. b/ |
7-1 -1 扩展接口 - 需求分析! l3 \( c) W7 U) f0 t( g0 y
7-2 -2 扩展接口 -接口类型定义+ 创建 Axios 类
. c- G6 M4 M& O1 p$ f7-3 -3 扩展接口 - 混合对象实现+ demo 编写
' w* c$ O3 G7 T1 M# T) m; p( \2 d7-4 -1 axios 函数重载 - 需求分析+ 重载实现+ demo 编写$ H* L5 i. O. R0 W! K
7-5 -1 响应数据支持泛型- 需求分析+ 接口添加泛型参数+ demo 编写. G6 |7 a9 |3 ~; p) a, s5 p
9 t9 l' d4 g0 A. C
第8章 ts-axios 拦截器实现【巧妙运用 Promise 链式调用】
. Z6 g6 ?$ W! _* M实现 axios 的拦截器功能,对整个实现做了详细的设计,最后实现拦截器管理类以及链式调用逻辑。# [6 J3 `9 F$ F. k( P0 g! n) P8 G
8-1 -1 拦截器的设计与实现 - 需求分析+ 整体设计: `, c* A9 |: j& \( {0 }
8-2 -2 拦截器的设计与实现 - 拦截器管理类实现6 `6 O9 `& x0 u
8-3 -3 拦截器的设计与实现 - 链式调用实现
+ R: H- S. a( g J7 M: w) K% `8-4 -4 拦截器的设计与实现 - demo 编写. t( e+ u# U* a4 h$ s
! v6 e) `$ V) H3 B第9章 ts-axios 配置化实现【巧妙运用策略模式实现配置合并】6 r+ V3 p& Q, `, D
让 axios 支持一些默认配置,实现了配置的合并,根据不同的属性采用不同的合并策略,并且扩展了 axios.create 方法扩展默认配置,生成新的实例。* ^' p3 e" s9 S. g k
9-1 合并配置的设计与实现 - 需求分析 + 默认配置$ ^/ K% `8 w `# m
9-2 合并配置的设计与实现 - 配置合并策略(上)
- ^4 B' H( Z; i4 z9-3 合并配置的设计与实现 - 配置合并策略(下)
! L) Q2 m/ L7 F: D. {% T9-4 合并配置的设计与实现 - flatten headers + demo 编写% O$ f" G# j# F/ Q; A
9-5 请求和响应配置化- 需求分析+ 修改默认配置
! `# v W; G5 G0 I5 @# `9-6 请求和响应配置化- transform 逻辑重构 + demo 编写' Q4 U4 b; K# c, y5 k
9-7 扩展 axios.create 静态接口 - 需求分析+ 静态方法扩展+ demo 实现
( `! k' I: i/ E& Y1 p! p- M9 U9 a: n& L- c3 _% F. f+ l" c
第10章 ts-axios 取消功能实现【巧妙运用 Promise 实现异步分离】
; G3 o. O* H: m: x+ h实现 axios 的取消功能,包括对取消接口的设计,CancelToken 类的设计与实现。; _) I. I) i1 U3 W) \2 p. g! ^
10-1 -1 取消功能的设计和实现 - 需求分析+ 异步分离的设计方案
/ c. }+ X9 [; Y O10-2 -2 取消功能的设计和实现 - CancelToken 类实现+ 扩展静态接口* h7 |9 ^- X1 f& F0 B3 P
10-3 -3 取消功能的设计和实现 - Cancel 类的实现及 axios 的扩展+ 额外逻辑实现! o E9 i, I: {$ f' T* v; c4 }
10-4 -4 取消功能的设计和实现 - demo 编写
' n- e8 }( Z/ b) J9 R+ q8 ]7 c7 p3 m4 L* `7 F! |
第11章 ts-axios 更多功能实现【锦上添花】0 ?2 M7 V: P0 o4 G1 K) b
实现 axios 更多的功能,包括 XSRF 防御、上传、http 认证授权、withCredentials、自定义参数序列化、自定义合法状态码、自定义合法状态码等,百分百实现官方 axio 在浏览器端的功能。7 {+ n/ y) `5 |$ U# E
11-1 withCredentials 需求分析&代码实现& demo 编写+ z# \/ B1 p2 s6 e+ [: E
11-2 xsrf 防御 - 需求分析& Q h$ o5 U/ n6 X1 C
11-3 xsrf 防御 - 代码编写! R0 D% o( N! s1 N
11-4 xsrf 防御 - demo 编写+ f2 G$ Q: L5 }* H4 g
11-5 上传和下载的进度监控 需求分析+ 代码实现
' u+ ~& r+ z0 o2 p7 I8 q11-6 上传和下载的进度监控 demo 编写" D0 H, z0 s) d; D$ ~6 \
11-7 HTTP 授权 需求分析+ 代码实现 + demo 编写
0 H/ u N' n, X- j6 E& Z2 ]11-8 自定义合法状态码 需求分析+ 代码编写 + demo编写
; w. L2 d# Z: N& [3 \0 ]11-9 自定义参数序列化 需求分析+ 代码编写 + demo编写
- V3 t- @4 U; ~7 j9 D4 s6 g- q11-10 baseURL 需求分析+ 代码编写 + demo编写, @. N* v. @3 O0 m
11-11 静态方法扩展 需求分析+ 代码编写 + demo编写
% Z5 {$ j0 z; O5 _1 ^! l5 _6 g( K( f+ V+ a( G D" |) [+ d0 v. X
第12章 ts-axios 单元测试【保障代码高质量】
, ^- o; [; r% c先介绍单元测试,再讲解测试环境搭建,最后完整的实现整个 axios 库的单元测试,保证测试覆盖率达到 99%
* W+ c% ^1 T F; s! h8 j& ?9 Z12-1 前言8 e7 e6 l7 q! C; E0 J0 e: |$ x* z
12-2 Jest 的安装和配置 Jest 安装7 W4 j: c, a$ S5 R. e# c2 {
12-3 辅助模块单元测试 准备工作* B v. Y& I0 S" |$ i l
12-4 辅助模块单元测试 util 模块测试-
: j, m4 G& W! i9 T12-5 辅助模块单元测试 cookie 模块测试 + data 模块测试 + error 模块测试) _) s* ^9 O: i1 f% W
12-6 辅助模块单元测试 headers 模块测试
( t" I0 g+ _, o; ?' ~12-7 辅助模块单元测试 url 模块测试5 ?" I# P5 X8 e2 P3 n" J E4 C9 J; G
12-8 请求模块单元测试 jasmine-ajax + 测试代码编写- X8 l+ J- q+ }0 k1 |
12-9 header 模块单元测试 测试代码编写
& @) _/ X; a1 w v6 I4 A1 z12-10 Axios 实例模块单元测试 测试代码编写
) }% y* H; p/ \" n& V12-11 拦截器模块单元测试 测试代码编写
. A4 [" c0 E3 r$ E12-12 mergeConfig 模块单元测试 测试代码编写' z* S { t0 r+ _2 Y' g
12-13 请求取消模块单元测试 Cancel 类单元测试 + CancelToken 类单元测试 + Cancel 业务逻辑单元测试& t9 j' {2 `4 @7 N) j
12-14 剩余模块单元测试 defaults 模块单元测试% s4 }6 a/ f1 t9 M
12-15 剩余模块单元测试 transform 模块单元测试 + xsrf 模块单元测试0 Q- m0 ^- E( S3 ?& M+ L. w
12-16 剩余模块单元测试 上传下载+HTTP 授权+ 静态方法模块单元测试
4 D! ~4 {6 x" @12-17 剩余模块单元测试 补充未覆盖的代码测试5 ?7 ]! {# ~' ~0 }9 P
$ o- g: \8 ~ t% o/ }
第13章 ts-axios 部署发布【向社区分享你的项目】3 q" Q& z0 d) G7 V# W
讲解 ts-axios 库的部署和发布,使用 Rollup 编写部署构建脚本,使用 semantic-release 管理版本和发布。4 F% M7 x) y$ k0 W: G [& s
13-1 ts-axios 编译与发布 需求分析 + 编译和打包
6 g' W, n H8 o5 Z2 |13-2 ts-axios 编译与发布 自动化部署
$ ^4 d3 j. d; o: u13-3 ts-axios 编译与发布 运行部署脚本8 B- q; C$ }4 y8 Y
13-4 ts-axios 库 在 TS 和 JS 项目中引用9 i/ W- h I" ^4 p: }( V
9 R3 L" q' f% N: J; R, ~
第14章 课程总结【知识梳理,巩固加深】" t0 G, V. z+ a
本次课程的整体回顾,总结学习的内容。
8 J2 F+ Z: P: n: }, S% j M14-1 课程总结 与回顾$ p% \6 y1 u: |( d) n
1 {* f% X5 F9 q) c
% L0 b) f2 k, E) S
〖下载地址〗
Y% i' d4 _! {$ w( K$ n& F2 J* i9 c7 I0 l2 Z
! o- l3 v# G% U; l$ K5 ]& j8 t4 `( e& L# r: Q! ^/ B; R$ Y- e
|
|