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上传插件 uploadify v3.1使用说明
Jun 18 Javascript
checkbox设置复选框的只读效果不让用户勾选
Aug 12 Javascript
Jquery 的outerHeight方法使用介绍
Sep 11 Javascript
Extjs实现进度条的两种便捷方式
Sep 26 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
Aug 18 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
May 27 Javascript
Angular.js中处理页面闪烁的方法详解
Mar 09 Javascript
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
angular.js实现购物车功能
Oct 23 Javascript
chosen实现省市区三级联动
Aug 16 Javascript
layui radio点击事件实现input显示和隐藏的例子
Sep 02 Javascript
node解析修改nginx配置文件操作实例分析
Nov 06 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中使用PDF文档功能
2006/10/09 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
2016/02/02 Javascript
jQuery插件fullPage.js实现全屏滚动效果
2016/12/02 Javascript
Bootstrap导航条学习使用(一)
2017/02/08 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
python多线程扫描端口示例
2014/01/16 Python
python实现文件快照加密保护的方法
2015/06/30 Python
Python中list初始化方法示例
2016/09/18 Python
简单实现python收发邮件功能
2018/01/05 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
详解Python中的编码问题(encoding与decode、str与bytes)
2020/09/30 Python
Django xadmin安装及使用详解
2020/10/26 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
介绍一下gcc特性
2015/10/31 面试题
一分钟演讲稿
2014/04/30 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
2019销售早会主持词
2019/06/27 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript