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 相关文章推荐
导入extjs、jquery 文件时$使用冲突问题解决方法
Jan 14 Javascript
jQuery中prepend()方法用法实例
Dec 25 Javascript
JS自定义对象实现Java中Map对象功能的方法
Jan 20 Javascript
JS实现网页上随滚动条滚动的层效果代码
Nov 04 Javascript
浅谈AngularJS中使用$resource(已更新)
Sep 14 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
Mar 23 jQuery
JS与SQL方式随机生成高强度密码示例
Dec 29 Javascript
微信小程序公用参数与公用方法用法示例
Jan 09 Javascript
详解webpack引入第三方库的方式以及注意事项
Jan 15 Javascript
vue项目强制清除页面缓存的例子
Nov 06 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
Jun 02 jQuery
JavaScript 实现继承的几种方式
Feb 19 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 foreach 参数强制类型转换的问题
2010/12/10 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
PHP中ini_set和ini_get函数的用法小结
2014/02/18 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
python利用sklearn包编写决策树源代码
2017/12/21 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
python3爬虫之设计签名小程序
2018/06/19 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
python tornado使用流生成图片的例子
2019/11/18 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
python中wheel的用法整理
2020/06/15 Python
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
投标诚信承诺书
2014/05/26 职场文书
社会工作专业求职信
2014/07/15 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
交警失职检讨书
2015/01/26 职场文书
外国人来华邀请函
2015/01/31 职场文书
高中同学会致辞
2015/08/01 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
《Estab Life》4月6日播出 正式PV、主视觉图公开
2022/03/20 日漫
redis sentinel监控高可用集群实现的配置步骤
2022/04/01 Redis