写点什么

TypeScript 3.5 发布: 增加 Omit 类型和智能联合类型检查

  • 2019-06-28
  • 本文字数:1689 字

    阅读完需:约 6 分钟

TypeScript 3.5 发布: 增加 Omit 类型和智能联合类型检查

TypeScript 团队发布了TypeScript 3.5,该版本包括了类型检查性能的改进和一个新的 Omit 类型。


TypeScript 3.4 引入了一个新的标识 --incremental ,该标识保存了上次编译时的项目图信息,这样可以最快地检测到对项目进行的类型检查和变更,从而降低后续的编译时间。TypeScript 3.5 改进了这种方法,TypeScript 项目经理 Daniel Rosenwasser 对此做出如下解释:


TypeScript 3.5 包含了几个用来缓存编译器设置、查找文件的原因以及找到文件的位置等计算状态信息的优化。我们发现,–build 模式下,在使用 TypeScript 项目引用的数百个场景中,与 TypeScript 3.4 相比,TypeScript 3.5 的重新构建时间降低了 68%。


为了加速类型检查,并解决 TypeScript 3.4 中引入的一些类型检查性能回归问题,TypeScript 团队重点优化了代码路径和功能,使得 TypeScript 3.5 在进行很多增量检查时比 TypeScript 3.3 更快,不仅编译时间减少,代码自动补全和其他编辑器操作也变的更快。


一个典型的 TypeScript 模式是创建一个省略某些特定属性的新对象。在 TypeScript 3.5 之前,开发人员通常采用组合 Pick 和 Exclude 辅助工具的形式来定义省略模式。TypeScript 3.5 新增了一个 Omit 类型。TypeScript 团队提供的一个示例,该示例展示了 TypeScript 3.5 发布前后如何定义一个不包含 location 属性的 Person 对象的过程。


采用无 Omit 类型的 TypeScript 3.4 实现如下:


type Person = {    name: string;    age: number;    location: string;};
type RemainingKeys = Exclude<keyof Person, "location">;
type QuantumPerson = Pick<Person, RemainingKeys>;
// equivalent totype QuantumPerson = { name: string; age: number;};
复制代码


采用新增了 Omit 类型的 TypeScript 3.5 的实现如下:


type Omit<T, K extends keyof any> = Pick<T, Exclude<keyof T, K>>;
复制代码


开发人员可以通过 lib.d.ts 获取 Omit 类型和其他内置辅助类型。


TypeScript 支持对象文本的多余属性检查,当一个类型包含意外属性时,它能检测出错误。在 TypeScript 3.5 之前,允许使用某些多余的属性,比如对象文本上的 name 属性,这是因为非区分联合不会对其成员执行多余属性检查。TypeScript 3.5 会验证所有提供的属性是否属于某个联合成员并具有适当的类型。


TypeScript 3.5 改进了联合类型检查。检查联合类型时,TypeScript 通常会单独比较每个组成类型。TypeScript 3.5 之前,在某些情况下,如果类型定义不够具体,类型检查就会失败。例如,如果一个成员的值是 true 或 false,而另一个成员使用具有相同属性值的 boolean 类型,那么检查就会失败。在 TypeScript 3.5 中,语言现在将类型分解为所有可能类型的联合。因为 boolean 是 true 与 false 的联合,所以现在这个例子就可以成功地进行类型检查了。


TypeScript 3.4 引入了对泛型函数的类型推导。TypeScript 3.5 将其推广到构造函数上。这种对泛型构造函数的新推导允许在某些 UI 库(如 React )中对类组件进行操作的函数可以更正确地对泛型类组件进行操作。


TypeScript 3.5 中的其他新特性还包括新增了 --allowUmdGlobalAccess 标志,它为编辑器提供了一个智能选择 API,以基于语法感知的方式扩展文本选择,并重构将类型抽取出本地类型别名。


TypeScript 3.4 引入了潜在的破坏性变更,下面这些是使用 TypeScript 3.5 新特性的修正结果:


  • 泛型类型参数被隐式约束为未知

  • { [k: string]: unknown } 不再是通配符赋值目标

  • 修复了对索引访问类型的不完全写入

  • Object.keys 拒绝 ES5 原语

  • lib.d.ts 中引入 Omit 辅助类型


TypeScript 团队已经在开发TypeScript 3.6的特性,3.6 版本中包括对生成器和迭代器的改进,对 ECMAScript 私有类字段的支持,更多的是对编译器、基础设施和编辑器的改进。


TypeScript 社区也在为 10 月 11 日举行的第二次TSConf活动做准备,届时 TypeScript 的创始人 Anders Hejlsberg 将发表主题演讲。


TypeScript 是 Apache 2 许可证下可用的开源软件。鼓励大家遵循TypeScript贡献指南微软开源行为准则TypeScript GitHub项目上进行贡献和反馈。


原文链接


TypeScript 3.5 Adds Omit Type, Smarter Union Type Checking


2019-06-28 08:0011402
用户头像

发布了 327 篇内容, 共 224.8 次阅读, 收获喜欢 617 次。

关注

评论

发布
暂无评论
发现更多内容

拿来即用!Get计算机视觉核心知识,看这本书就够了!

博文视点Broadview

ffplay视频播放原理分析

百度Geek说

音视频

兆骑科创创业大赛,双创服务平台,线上直播路演

兆骑科创凤阁

2022最新发布超全的Java面试八股文,整整1700页,太全了

Java工程师

Java 面试 八股文

R7 6800H+RTX3050+120Hz 2.8K OLED屏,无畏Pro15 2022开启预售

科技热闻

多图预警!华为 ECS 与 阿里云 ECS 对比实战【华为云至简致远】

科技云未来

华为云 虚拟私有云VPC ECS

Mysql 生成排序序号

六月的雨在InfoQ

8月月更

高性能创作本,日常修图剪辑选华硕无畏Pro15 2022完全足矣!

科技热闻

树莓派 USB摄像头 实现网络监控( MJPG-Streamer)

Five

树莓派 网络监控 #web 8月月更

【实战】Next.js + 云函数开发一个面试刷题网站

狂奔滴小马

Serverless React

利用华为云ECS服务器搭建安防视频监控平台【华为云至简致远】

科技云未来

nginx securecrt RTMP SSH工具

使用华为HECS云服务器打造Telegraf+Influxdb+Grafana 监控系统【华为云至简致远】

科技云未来

Grafana Influxdb 系统管理 开源监控系统 提高效率

大数据程序员培训学习多长时间可以找工作

小谷哥

DeepLink在转转的实践

转转技术团队

ios android 客户端

使用前端技术实现静态图片局部流动效果

dragonir

CSS JavaScript html 前端 SVG

彻底搞懂云桌面配置及实践踩坑【华为云至简致远】

神奇视野

Python 科技

生物统计师与临床医生协同研究使用的低代码洞察平台丨数据科学 x 临床医学

ModelWhale

团队协作 Jupyter Notebook 数据科学 低代码开发 临床医学

使用域名注册服务 Domains配置域名【华为云至简致远】

科技云未来

域名配置 端口映射

基于ModelArts的动漫头像自动生成丨【华为云至简致远】

科技云未来

华为云ModelArts

为什么Spring Boot项目加上就可以更新版本?

冉然学Java

程序员 源码分析 springboot Java 分布式 Java core

云硬盘EVS详解以及如何用与避坑【华为云至简致远】

神奇视野

Python 后端 云服务 科技

NFT盲盒挖矿DAO智能合约dapp系统开发详情

开发微hkkf5566

快速定位线上慢SQL问题,掌握这几个性能排查工具可助你一臂之力

IT学习日记

MySQL性能优化 数据库优化 MySQL 数据库 签约计划第三季 explain关键字

兆骑科创高层次人才引进平台,创新创业赛事活动路演

兆骑科创凤阁

阿里大佬力荐的这份“Spring全家桶”太强了,在轻松中学习掌握

Java工程师

Java spring spring-boot

手摸手带你完成智慧路灯构建及避坑【华为云至简致远】

神奇视野

Python 科技

阿里云 EMAS Serverless 升级发布

移动研发平台EMAS

小程序云开发 阿里云 Serverless 开发者 云开发

交大医学院临床研究中心如何将 ModelWhale 应用于临床医生教学、研究丨数据科学 x 临床医学

ModelWhale

人才培养 数据科学 低代码平台 教学 临床医学

大数据培训学习开发技术费用

小谷哥

上海web前端培训课程

小谷哥

Jupyter Notebook 交互式编程 & 低代码拖拽式编程 | 数据科学生态下的理想平台

ModelWhale

云原生 Jupyter Notebook 数据科学 低代码开发 协作平台

TypeScript 3.5 发布: 增加 Omit 类型和智能联合类型检查_语言 & 开发_Dylan Schiemann_InfoQ精选文章