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

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

如果一个变量有多种类型,读取该变量时,往往需要进行“类型缩小”(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进行类型缩小,根据不同的值类型,返回不同的结果。

来源:

目录
打赏
0
0
0
0
8
分享
相关文章
【细节拉满】Hadoop课程设计项目,使用idea编写基于MapReduce的学生成绩分析系统(附带源码、项目文件下载地址)(三)
【细节拉满】Hadoop课程设计项目,使用idea编写基于MapReduce的学生成绩分析系统(附带源码、项目文件下载地址)(三)
954 0
【Java】Spring如何扫描自定义的注解?
【Java】Spring如何扫描自定义的注解?
267 0
Vue 入门系列:.env 环境变量
Vue 入门系列:.env 环境变量
206 1
通义灵码入选 2024 世界人工智能大会最高荣誉「镇馆之宝」
7 月 4 日,2024 上海世界人工智能大会正式开幕,并揭晓了今年的「镇馆之宝」名单,通义灵码入选,是首个入围该名单的 AI 编程助手。
Next.js 实战 (一):项目搭建指南
这篇文章介绍了作者在2024年下半年计划使用Next.js从零开始搭建一个后台模板,以探索Next.js的奥秘。文章包含了项目搭建、目录结构、APP路由约定、配置Eslint、Prettierrc、Husky等项目提交规范、使用release-it自动管理版本号和生成CHANGELOG、import排序规则、安装NextUI等内容。作者还提到会在开发过程中记录遇到的问题和解决方法,并计划在后期使用Prisma+Supabase数据库存储数据,最终完成一个基于Next.js的全栈项目。
243 0
Next.js 实战 (一):项目搭建指南
通义灵码入选 2024 世界人工智能大会最高荣誉「镇馆之宝」
镇馆之宝是世界人工智能大会展览的最高荣誉,从科技含量、市场前景、创新性以及社会经济效益等维度综合考量评选,每年入选数量不超过 10 个,获奖产品不仅代表了当前人工智能领域的最新技术成果,还展示了未来的发展趋势和商业潜力。作为国内最受欢迎的辅助编程工具,通义灵码凭借在功能、性能、安全性以及应用落地等方面的优势成功入选。
247 0
探索Linux中的`script`命令:记录你的终端会话
`script`命令在Linux中记录终端会话,用于重现交互、教学和调试。它启动新shell,捕获所有输入输出到文件,默认文件为`typescript`。主要选项包括追加输出 `-a`,执行单个命令 `-c`,实时写入 `-f`,静默模式 `-q` 和添加时间戳 `-t`。示例用法:记录脚本执行`script -a log.sh script.sh`,或带时间戳记录`script -t timestamps.log`。注意文件权限、磁盘空间和敏感信息处理。
TS,添加注释,//,ctrl + /,shift + alt + a,输出语句,console.log(“Hello Ts‘),变量和数据类型导读,变量就是用来存储数据的容器,变量的使用,TS
TS,添加注释,//,ctrl + /,shift + alt + a,输出语句,console.log(“Hello Ts‘),变量和数据类型导读,变量就是用来存储数据的容器,变量的使用,TS
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问