当前位置: 首页 > news >正文

“typescript“ “type predicate“ 陷阱记录

“typescript” “type predicate” 陷阱记录

起因

一个让我开始怀疑人生的bug.

经过

搞了半天, bar里面的运行过程还是没有搞懂.
可以去 typescript playground看看.

type A={}function isA(x:any): x is A{return Object.values(x).length==0;
}
type B={_:null
}function foo(x:A|B) {if(isA(x)){x;
//      ^?}else{x;
//      ^?}
}function bar(x:A|B) {if(isA(x as number)){x;
//      ^?}else{x;
//      ^?}
}

结果

直接说结论,因为B的属性的集合是A的超集,所以,isA并不能区分AB,对typescript来说,B也是A类型的,所以在fooelse里面x的类型直接变成了never
                                                                                 (: <)

相关文章:

  • 牛客周赛 Round 36
  • 代码随想录刷题笔记 DAY 42 | 最后一块石头的重量 II No.1049 | 目标和 No.494 | 一和零 No.474
  • Unity使用Addressable热更新
  • 华为evpn简单配置案例
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit
  • c++之迭代器与反向迭代器
  • 学习笔记。。。
  • Vue快速开发一个主页
  • Java代码审计安全篇-常见Java SQL注入
  • Linux多线程之线程控制
  • IM6ULL学习总结(四-七-1)输入系统应用编程
  • 【SD学习】开始绘制你的第一张美图
  • for、while、do While、for in、forEach、map、reduce、every、some、filter的使用
  • SQL注入攻击 - 堆叠注入(Stacked Injection)
  • 每天学习一个Linux命令之df
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • github指令
  • JavaScript新鲜事·第5期
  • java小心机(3)| 浅析finalize()
  • maven工程打包jar以及java jar命令的classpath使用
  • node学习系列之简单文件上传
  • React-Native - 收藏集 - 掘金
  • Redux系列x:源码分析
  • vue中实现单选
  • XForms - 更强大的Form
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何设计一个比特币钱包服务
  • 三栏布局总结
  • 算法-插入排序
  • 小程序开发之路(一)
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 《天龙八部3D》Unity技术方案揭秘
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #define、const、typedef的差别
  • #if 1...#endif
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #Spring-boot高级
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (蓝桥杯每日一题)love
  • (区间dp) (经典例题) 石子合并
  • (一)为什么要选择C++
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .Net CoreRabbitMQ消息存储可靠机制
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • @ModelAttribute使用详解
  • @property python知乎_Python3基础之:property
  • @RequestBody的使用
  • [1204 寻找子串位置] 解题报告
  • [2669]2-2 Time类的定义
  • [android]-如何在向服务器发送request时附加已保存的cookie数据