TS 类型收窄教程示例详解


Posted in Javascript onSeptember 23, 2022

类型收窄之前只能使用公共方法

JS方法

typeof

缺点

  • typeof null —→ object
  • typeof 数组 —→ object
  • typeof 日期 —→ object

a instanceof A : A 是否出现在a的原型链上

缺点

不支持stringnumberboolean 等原始类型

不支持TS的 自定义类型,如下:

type Person {
  name: string
}
  • key in obj
  • Array.isArray()

??类型谓词is

重点在 shape is Rect

type Rect = {
  width: number
  height: number
}
type Circle = {
  center: [number, number]
  radius: number
}
const area = (shape: Rect | Circle): number => {
  if(isRect(shape)) {
    return shape.width * shape.height
  } else {
    return Math.PI * shape.radius ^ 2
  }
}
const isRect = (shape: Rect | Circle): shape is Rect => {
  return 'width' in shape && 'height' in shape
}

????可辨别联合

要求:T = A | B | C

  • A | B | C … 要有一个相同的属性 type或其它
  • type类型只能为 简单类型
  • A | B | C …的type属性无交集
type Rect = {
  type: 'rect',
  width: number
  height: number
}
type Circle = {
  type: 'circle'
  center: [number, number]
  radius: number
}
const area = (shape: Rect | Circle): number => {
  if(shape.type === 'rect') {
    return shape.width * shape.height
  } else {
    return Math.PI * shape.radius ^ 2
  }
}

以上就是TS 类型收窄教程示例详解的详细内容,更多关于TS 类型收窄的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
jQuery源码分析-03构造jQuery对象-工具函数
Nov 14 Javascript
YUI Compressor压缩JavaScript原理及微优化
Jan 07 Javascript
让table变成exls的示例代码
Mar 24 Javascript
jquery实现不包含当前项的选择器实例
Jun 25 Javascript
JS与jQuery实现隔行变色的方法
Sep 09 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
Mar 21 Javascript
create-react-app安装出错问题解决方法
Sep 04 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
Aug 26 Javascript
js实现带搜索功能的下拉框
Jan 11 Javascript
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 jQuery
Vue双向数据绑定(MVVM)的原理
Oct 03 Javascript
es5 类与es6中class的区别小结
Nov 09 Javascript
JavaScript实现简单的音乐播放器
Aug 14 #Javascript
vue实现简易音乐播放器
Aug 14 #Vue.js
Vue3实现简易音乐播放器组件
Aug 14 #Vue.js
element tree树形组件回显数据问题解决
Aug 14 #Javascript
el-table-column 内容不自动换行的解决方法
Aug 14 #Vue.js
JavaScript实现音乐播放器
vue el-table实现递归嵌套的示例代码
Aug 14 #Vue.js
You might like
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
如何用PHP实现插入排序?
2013/04/10 PHP
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
underscore之function_动力节点Java学院整理
2017/07/11 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
JavaScript实现多重继承的方法分析
2018/01/09 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
2018/01/10 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
python使用marshal模块序列化实例
2014/09/25 Python
python实现requests发送/上传多个文件的示例
2018/06/04 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
python3 拼接字符串的7种方法
2018/09/12 Python
python调用java的jar包方法
2018/12/15 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
django框架cookie和session用法实例详解
2019/12/10 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
HTML5 解析规则分析
2009/08/14 HTML / CSS
HTML5中的进度条progress元素简介及兼容性处理
2016/06/02 HTML / CSS
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
作风整顿剖析材料
2014/09/30 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书