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 Array.remove() 数组删除
Aug 06 Javascript
js 获取浏览器高度和宽度值(多浏览器)
Sep 02 Javascript
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
Apr 07 Javascript
js判断屏幕分辨率的代码
Jul 16 Javascript
js和jquery分别验证单选框、复选框、下拉框
Dec 17 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
Jan 29 Javascript
jQuery中deferred对象使用方法详解
Jul 14 Javascript
基于jQuery实现中英文切换导航条效果
Sep 18 Javascript
js 数据存储和DOM编程
Feb 09 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
Dec 27 Javascript
JavaScript工具库MyTools详解
Jan 01 Javascript
vue相同路由跳转强制刷新该路由组件操作
Aug 05 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入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
回帖脱衣服的图片实现代码
2014/02/15 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
php单链表实现代码分享
2016/07/04 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
vue中keep-alive的用法及问题描述
2018/05/15 Javascript
element-ui 设置菜单栏展开的方法
2018/08/22 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
2020/07/28 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
[05:24]TI9采访——教练
2019/08/24 DOTA
通过PYTHON来实现图像分割详解
2019/06/26 Python
Python3.0 实现决策树算法的流程
2019/08/08 Python
python3图片文件批量重命名处理
2019/10/31 Python
Django设置Postgresql的操作
2020/05/14 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
Gtech官方网站:地毯清洁器、吸尘器及园艺设备
2018/05/23 全球购物
商场父亲节活动方案
2014/08/27 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
检查机关党的群众路线个人整改措施
2014/10/04 职场文书
个人工作总结范文2014
2014/11/07 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL
mysql事务隔离级别详情
2021/10/24 MySQL