TypeScript 高级数据类型 | 青训营笔记

66 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第7天


一、本堂课重点内容:

  • 联合交叉类型
  • 类型保护与类型守卫
  • Merge 函数类型实现
  • 函数返回值类型

二、详细知识点介绍:

  • 联合交叉类型

引入

image.png 这样一个类型一个类型地声明就很繁琐,存在较多重复,用联合交叉类型可以较好地解决这个问题

首先来介绍一下什么是联合交叉类型

1.联合类型
|A | |B;联合类型表示一个值可以是几种类型之一
1.联合类型
|A | |B;多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性

image.png

  • 类型保护与类型守卫
    注意!!
    访问联合类型时,处于程序安全,仅能访问联合类型中的交集部分,下方的例子就可以简单说明

image.png
所以上方的例子就需要修改,下面这样修改就行了

image.png

image.png

  • Merge 函数类型实现

要求 :实现merge函数类型,要求sourceObj必须为targetObj子集

image.png
非常容易想到的就是直接用子集的方式表达,例如下方

image.png
但是这样的类型实现繁琐(若obj类型较为复杂,则声明source和target便需要大量重复2遍),而且容易出错(若target增加/减少key,则需要source联动去除),所以接下来会引Merge函数类型来实现上述要求,使程序写起来简单,且易维护

image.png

  • 函数返回值类型
    要求 :实现delayCall的类型声明,delayCall接受一个函数作为入参,其实延迟1s运行函数,其返回promise,结果作为入参函数的返回结果

image.png

//关键字【extends】跟随泛型出现时,表示类型推断,其表达可类比三元表达式
//如 T === 判断类型?类型A:类型B
//关键字【infer】出现在类型推荐中,表示定义类型变量,可以用于指代类型
//如该场景下,将函数的返回值类型作为变量,使用新泛型R表示,使用在类型推荐命中的结果中

image.png
四、课后个人总结:

  • 本章有什么知识点不容易掌握?
    本章主要是教学TypeScript,学完之后,我感觉让我觉得不太容易掌握的知识点是泛型,对于泛型啥时候用,用泛型有啥好处,会有点迷惑,就感觉只是知道这个东西,但是自己在实操的时候,不会用泛型。
    还有不太好掌握的就是那个联合交叉类型,联合交叉类型的格式虽然简化了代码量,但是实操过程中还是比较难掌握的