这是我参与「第五届青训营 」笔记创作活动的第7天
一、本堂课重点内容:
- 联合交叉类型
- 类型保护与类型守卫
- Merge 函数类型实现
- 函数返回值类型
二、详细知识点介绍:
- 联合交叉类型
引入
这样一个类型一个类型地声明就很繁琐,存在较多重复,用联合交叉类型可以较好地解决这个问题
首先来介绍一下什么是联合交叉类型
1.联合类型
|A | |B;联合类型表示一个值可以是几种类型之一
1.联合类型
|A | |B;多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性
- 类型保护与类型守卫
注意!!
访问联合类型时,处于程序安全,仅能访问联合类型中的交集部分,下方的例子就可以简单说明
所以上方的例子就需要修改,下面这样修改就行了
- Merge 函数类型实现
要求 :实现merge函数类型,要求sourceObj必须为targetObj子集
非常容易想到的就是直接用子集的方式表达,例如下方
但是这样的类型实现繁琐(若obj类型较为复杂,则声明source和target便需要大量重复2遍),而且容易出错(若target增加/减少key,则需要source联动去除),所以接下来会引Merge函数类型来实现上述要求,使程序写起来简单,且易维护
- 函数返回值类型
要求 :实现delayCall的类型声明,delayCall接受一个函数作为入参,其实延迟1s运行函数,其返回promise,结果作为入参函数的返回结果
//关键字【extends】跟随泛型出现时,表示类型推断,其表达可类比三元表达式
//如 T === 判断类型?类型A:类型B
//关键字【infer】出现在类型推荐中,表示定义类型变量,可以用于指代类型
//如该场景下,将函数的返回值类型作为变量,使用新泛型R表示,使用在类型推荐命中的结果中
四、课后个人总结:
- 本章有什么知识点不容易掌握?
本章主要是教学TypeScript,学完之后,我感觉让我觉得不太容易掌握的知识点是泛型,对于泛型啥时候用,用泛型有啥好处,会有点迷惑,就感觉只是知道这个东西,但是自己在实操的时候,不会用泛型。
还有不太好掌握的就是那个联合交叉类型,联合交叉类型的格式虽然简化了代码量,但是实操过程中还是比较难掌握的