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实现图片无间断滚动代码汇总
Jul 30 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
Oct 17 Javascript
JavaScript节点及列表操作实例小结
Aug 05 Javascript
JS版元素周期表实现方法
Aug 05 Javascript
Node.js刷新session过期时间的实现方法推荐
May 18 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
Oct 11 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
Sep 26 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
Nov 24 Javascript
Vue中Quill富文本编辑器的使用教程
Sep 21 Javascript
微信小程序如何实现在线客服功能
Oct 16 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
Aug 07 Javascript
在vue中使用vant TreeSelect分类选择组件操作
Nov 02 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之autoload运行机制实例分析
2014/08/28 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
2014/06/09 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
2017/01/13 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
使用puppeteer破解极验的滑动验证码
2018/02/24 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
[05:08]DOTA2-DPC中国联赛3月6日Recap集锦
2021/03/11 DOTA
使用Python开发windows GUI程序入门实例
2014/10/23 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
Python批量提取PDF文件中文本的脚本
2018/03/14 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
numpy向空的二维数组中添加元素的方法
2018/11/01 Python
django基础学习之send_mail功能
2019/08/07 Python
Python imread、newaxis用法详解
2019/11/04 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
如何提高JDBC的性能
2013/04/30 面试题
单位人事专员介绍信
2014/01/11 职场文书
招聘单位介绍信
2014/01/14 职场文书
2016年小学“公民道德宣传日”活动总结
2016/04/01 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
详解MongoDB的条件查询和排序
2021/06/23 MongoDB
Pytest中skip skipif跳过用例详解
2021/06/30 Python
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
nginx 添加http_stub_status_module模块
2022/05/25 Servers