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 相关文章推荐
使用JS操作页面表格,元素的一些技巧
Feb 02 Javascript
js函数使用技巧之 setTimeout(function(){},0)
Feb 09 Javascript
jQuery源码分析-01总体架构分析
Nov 14 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
Nov 18 Javascript
JScript中的条件注释详解
Apr 24 Javascript
JavaScript性能优化总结之加载与执行
Aug 11 Javascript
AngularJS2中一种button切换效果的实现方法(二)
Mar 27 Javascript
AngularJS页面传参的5种方式
Apr 01 Javascript
利用JS实现简单的瀑布流加载图片效果
Apr 22 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
May 02 Javascript
Vue 中 filter 与 computed 的区别与用法解析
Nov 21 Javascript
jquery插件实现悬浮的菜单
Apr 24 jQuery
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 excel类 phpExcel使用方法介绍
2010/08/21 PHP
PHP面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
php获取mysql字段名称和其它信息的例子
2014/04/14 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
js简单实现竖向tab选项卡的方法
2015/05/04 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
浅谈JavaScript的计时器对象
2016/12/26 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
微信小程序生成分享海报方法(附带二维码生成)
2019/03/29 Javascript
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
Python编程中的反模式实例分析
2014/12/08 Python
python中kmeans聚类实现代码
2018/02/23 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
2019/08/01 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
英国一家专门出售品牌鞋子的网站:Allsole
2016/08/07 全球购物
蛋白质世界:Protein World
2017/11/23 全球购物
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
歌唱比赛获奖感言
2014/01/21 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
优秀班主任材料
2014/12/16 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
情感电台广播稿
2015/08/18 职场文书