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 相关文章推荐
javascript一个无懈可击的实例化XMLHttpRequest的方法
Oct 13 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
Jul 20 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
Dec 28 Javascript
js异常捕获方法介绍
Apr 10 Javascript
基于jquery异步传输json数据格式实例代码
Nov 23 Javascript
javascript去除字符串左右两端的空格
Feb 05 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
Mar 26 Javascript
实例详解AngularJS实现无限级联动菜单
Jan 15 Javascript
Web前端开发工具——bower依赖包管理工具
Mar 29 Javascript
vue.js初学入门教程(2)
Nov 07 Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
Mar 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
PHP strtotime函数用法、实现原理和源码分析
2015/02/04 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
Javascript Math ceil()、floor()、round()三个函数的区别
2010/03/09 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
2014/06/05 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
AngularJS  自定义指令详解及实例代码
2016/09/14 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
Angular5给组件本身的标签添加样式class的方法
2018/04/07 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
Vue中遍历数组的新方法实例详解
2019/07/21 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
跟老齐学Python之用while来循环
2014/10/02 Python
Python读写Json涉及到中文的处理方法
2016/09/12 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
python如何实现内容写在图片上
2018/03/23 Python
Django 大文件下载实现过程解析
2019/08/01 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
python爬取代理ip的示例
2020/12/18 Python
物流管理毕业生自荐信
2013/10/24 职场文书
家长对小学生的评语
2014/01/28 职场文书
对公司合理化的建议书
2014/03/12 职场文书
环卫工人节活动总结
2014/08/29 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
2015年科协工作总结
2015/05/19 职场文书
2016幼儿园毕业感言
2015/12/08 职场文书
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript