[TS手册学习] 02_类型收窄 Narrowing

这篇具有很好参考价值的文章主要介绍了[TS手册学习] 02_类型收窄 Narrowing。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TS官方手册:TypeScript: Handbook - The TypeScript Handbook (typescriptlang.org)

一个变量如果声明为联合类型,而后续操作需要针对其具体的单一类型做不同处理,这个过程就叫做类型收窄(Narrowing)。

常见的做法或情形有以下:

typeof 类型保护(type guards)

typeof是 JS 中的操作符,需要注意typeof对象、数组、null都会返回object

真值收窄(Truthiness narrowing)

0NaN""0nnullundefined都会被隐式转换为false,属于假值,其它的值是真值。依据这个规则也可以收窄类型。

等值收窄(Equality narrowing)

在 JS 中,全等判断符===要求两边类型一致,以此也可以排除一些类型,从而实现收窄类型。

in 操作符收窄

in操作符检查指定的属性是否在指定的对象或其原型链中。

instanceof 收窄

instanceof运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

赋值语句(Assignments)

TS 可以根据赋值语句的右值的类型收窄左值。

控制流分析(Control flow analysis)

基于可达性的代码分析就是控制流分析,关注代码中的ifwhile等条件控制语句。

如果代码达到了某个区域,而根据条件控制语句可以得知:如果变量X是类型A,无法到达此区域,那么就可以推断出到达此区域的变量X的类型不可能是A。

于是类型收窄。

function padLeft(padding: number | string, input: string) {
  if (typeof padding === "number") {
    return new Array(padding + 1).join(" ") + input;
  }
  return padding + input;
}

在第一个 if 语句里,因为有 return 语句,TypeScript 就能通过代码分析,判断出在剩余的部分 return padding + input ,如果 padding 是 number 类型,是无法达到 (unreachable) 这里的,所以在剩余的部分,就会将 number类型从 number | string 类型中删除掉。文章来源地址https://www.toymoban.com/news/detail-747498.html

到了这里,关于[TS手册学习] 02_类型收窄 Narrowing的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [TS手册学习] 04_类

    TS官方手册:TypeScript: Handbook - The TypeScript Handbook (typescriptlang.org) 类的成员 初始化 类的成员属性声明类型: 类的成员属性初始化,会在实例化的时候完成赋值: 严格初始化 --strictPropertyInitialization 配置项为 true 的时候,要求成员属性必须初始化,否则报错。 可以在声明成员

    2024年02月05日
    浏览(34)
  • [TS手册学习] 03_函数相关知识点

    TS官方手册:TypeScript: Handbook - The TypeScript Handbook (typescriptlang.org) 函数类型表达式 使用类似于箭头表达式的形式来描述一个函数的类型。 上述代码中, fn: (a:string) = void 表示变量 fn 是一个函数,这个函数有一个参数 a ,是 string 类型,且这个函数的返回值类型为 void ,即没有

    2024年02月05日
    浏览(42)
  • TS学习01-基本数据类型

    布尔值 数字 字符串 数组 第一种: 在元素类型后面接上 [] 第二种 数组泛型-Array元素类型 元组 Tuple 表示一个已知元素数量和类型的数组· 当访问越界元素,会使用 联合类型 代替 枚举 enum 对 JavaScript 标准数据类型的一个补充。 默认从 0开始为元素编号;可以手动指定成员值

    2024年02月14日
    浏览(34)
  • 前端TypeScript学习day01-TS介绍与TS部分常用类型

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 TypeScript 介绍 TypeScript 是什么 TypeScript 为什么要为 JS 添加类型支持?  TypeScript 相比 JS 的优势  TypeScript 初体验  安装编译 TS 的工具包 编译并运行 TS 代码 简化运行 TS

    2024年02月08日
    浏览(39)
  • 前端TypeScript学习day03-TS高级类型

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)            目录 TypeScript 高级类型 class 类 class继承  extends implements  类成员可见性  public  protected  private   readonly 兼容性 类型兼容性 接口兼容性  函数兼容性  TypeScri

    2024年02月08日
    浏览(37)
  • 学习笔记整理-JS-02-基本类型

    1. JavaScript 中两大数据类型 基本数据类型 Number String Boolean Undefined Null 复杂数据类型 Object Array Function RegExp Date Map Set Symbol 等等 typeof 运算法 使用 typeof 运算法可以检测值或者变量的类型 类型名 typeof检测结果 值举例 数字类型 number 5 字符串类型 string ‘张三’ 基本类型值 布尔

    2024年02月13日
    浏览(47)
  • 读SQL学习指南(第3版)笔记02_数据类型

    Database changed 2.1.1.1. 单字节字符集 2.1.1.2. 字符数量很少,只需要单字节就能存储每个字符 2.1.1.3. 之前版本的MySQL服务器中,默认字符集是latin1 2.1.2.1. 日语 2.1.2.2. 韩语 2.1.2.3. 多字节来存储每个字符 2.1.2.4. 版本8中改为了utf8mb4 2.1.5.1. varchar(20) character set latin1 2.1.6.1. creat

    2024年02月12日
    浏览(42)
  • trino常用语法和官方sql手册

    trino常用语法 trino数据库造简单表的语法模板 = 没有分区的sql 简单创建、查询、插入 =========== create table hive.youyou030310.even( id int, event_type varchar); insert into hive.youyou030310.even(id,event_type) values (1,‘点击’),(1,‘查看商品’),(1,‘购物’),(2,‘点击’),(2,‘查看商品’),(3,‘点击’)

    2024年02月05日
    浏览(38)
  • Vue3+VueCli+TS官方模板简析

    使用vueCli 安装预设的vuex+ts+less+router 按方向键 ↓,选择Manually select features,enter 手动配置:是我们所需要的面向生产的项目,提供可选功能的 npm 包 手动配置,根据你需要用方向键选择(按 “空格键”选择/取消选择,A键全选/取消全选,i反选)对应功能 ? Check the features ne

    2024年02月11日
    浏览(80)
  • XILINX FPGA K7配置启动流程(官方手册整理)

         1.在配置过程中,7系芯片需要的电压有,Vcco0,Vccaux,Vccbram和Vccint。       所有的Jtag配置引脚在一个独立的专用bank上,使用的电源也是专用电源Vcco0。多功能pin在14和15bank。bank0,14和15上的专用输入输出引脚使用Vcco0,Vcco14,Vcco15的LVCMOS电平,电平需要匹配,输出引脚

    2023年04月22日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包