通过类型缩小来处理联合类型值

简介: 通过类型缩小来处理联合类型值

如果一个变量有多种类型,读取该变量时,往往需要进行“类型缩小”(type narrowing),区分该值到底属于哪一种类型,然后再进一步处理。


function printId(id: number | string) {
  console.log(id.toUpperCase()); // 报错
}


上面示例中,参数变量id可能是数值,也可能是字符串,这时直接对这个变量调用toUpperCase()方法会报错,因为这个方法只存在于字符串,不存在于数值。


解决方法就是对参数id做一下类型缩小,确定它的类型以后再进行处理。


function printId(id: number | string) {
  if (typeof id === "string") {
    console.log(id.toUpperCase());
  } else {
    console.log(id);
  }
}


上面示例中,函数体内部会判断一下变量id的类型,如果是字符串,就对其执行toUpperCase()方法。


“类型缩小”是 TypeScript 处理联合类型的标准方法,凡是遇到可能为多种类型的场合,都需要先缩小类型,再进行处理。实际上,联合类型本身可以看成是一种“类型放大”(type widening),处理时就需要“类型缩小”(type narrowing)。

下面是“类型缩小”的另一个例子。

function getPort(scheme: "http" | "https") {
  switch (scheme) {
    case "http":
      return 80;
    case "https":
      return 443;
  }
}


上面示例中,函数体内部对参数变量scheme进行类型缩小,根据不同的值类型,返回不同的结果。

来源:

目录
相关文章
|
弹性计算 JavaScript 前端开发
常见类型-1:空,联合,枚举
本实验将介绍TypeScript中空,联合,枚举类型的用法。
|
8月前
|
编译器 C语言 C++
结构体,枚举,联合大小的计算规则
结构体,枚举,联合大小的计算规则
54 7
|
8月前
|
JavaScript 前端开发 编译器
TypeScript中的高级类型:联合类型、交叉类型与条件类型深入解析
【4月更文挑战第23天】探索TypeScript的高级类型。这些特性增强类型系统的灵活性,提升代码质量和维护性。
|
8月前
|
数据处理 Python
不同类型数据间的混合运算
在编程和数据处理中,我们经常需要处理不同类型的数据,如整数、浮点数、字符串等。当这些不同类型的数据需要进行混合运算时,我们需要特别注意数据类型之间的转换和运算规则。本文将介绍不同类型数据间的混合运算,并附上相应的代码示例。
158 0
C++11之防止类型收窄(列表初始化)
C++11之防止类型收窄(列表初始化)
131 0
|
算法 搜索推荐 编译器
一组类型相同的数据【C 数组】总结
一组类型相同的数据【C 数组】总结
|
JavaScript 编译器
学习TypeScrip6(类型断言 | 联合类型 | 交叉类型)
学习TypeScrip6(类型断言 | 联合类型 | 交叉类型)
93 0
|
C语言
用函数方法来比较三个数字中的较大值(常规,函数)
用函数方法来比较三个数字中的较大值(常规,函数)
145 0
用函数方法来比较三个数字中的较大值(常规,函数)
比较任意类型是否相等!
比较任意类型是否相等!
89 0
|
JavaScript 前端开发 算法
从规范的角度解析对象 — 原始值转换
从规范的角度解析对象 — 原始值转换
159 0
从规范的角度解析对象 — 原始值转换