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

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

如果一个变量有多种类型,读取该变量时,往往需要进行“类型缩小”(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中空,联合,枚举类型的用法。
|
6月前
|
编译器 C语言 C++
结构体,枚举,联合大小的计算规则
结构体,枚举,联合大小的计算规则
43 7
|
6月前
|
JavaScript 前端开发 编译器
TypeScript中的高级类型:联合类型、交叉类型与条件类型深入解析
【4月更文挑战第23天】探索TypeScript的高级类型。这些特性增强类型系统的灵活性,提升代码质量和维护性。
|
6月前
|
C++
『C/C++』Eg4: 求自定类型元素的平均
『C/C++』Eg4: 求自定类型元素的平均
C++11之防止类型收窄(列表初始化)
C++11之防止类型收窄(列表初始化)
112 0
枚举的三种类型--指数型&排列型&组合型
枚举的三种类型--指数型&排列型&组合型
105 0
|
JavaScript 编译器
学习TypeScrip6(类型断言 | 联合类型 | 交叉类型)
学习TypeScrip6(类型断言 | 联合类型 | 交叉类型)
81 0
|
C语言
用函数方法来比较三个数字中的较大值(常规,函数)
用函数方法来比较三个数字中的较大值(常规,函数)
129 0
用函数方法来比较三个数字中的较大值(常规,函数)
02:计算(a+b)*c的值
02:计算(a+b)*c的值
83 0
03:计算(a+b)/c的值
03:计算(a+b)/c的值
149 0