写点什么

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:0011618
用户头像

发布了 577 篇内容, 共 418.1 次阅读, 收获喜欢 733 次。

关注

评论

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

SAP CRM 和 Cloud for Customer 的 Document flow API 介绍

汪子熙

CRM SAP abap C4C documentFlow

网络攻防学习笔记 Day23

穿过生命散发芬芳

5月日更 网络攻防

为什么有的系统的事务码BSP_WD_CMPWB看不见Enhance Component这个按钮

汪子熙

CRM SAP abap

模块4作业

梦寐凯旋

架构实战营

模块 4 - 千万级学生管理系统的考试试卷存储方案

小遵

Flume知识点总结

大数据技术指南

flume 5月日更

实战|教你用Python玩转Mysql

Python研究者

Python MySQL MySQL 运维

SAP S4CRM (SAP Customer Management for S/4HANA) 1.0 介绍

汪子熙

CRM SAP abap S/4HANA

面试问题 - 只用位操作在ABAP里实现a+b

汪子熙

面试 SAP abap

HBase常见问题

数据社

大数据 HBase 5月日更

架构实战营模块四作业

薛定谔的指南针

架构实战营

模块4 学习总结

TH

架构实战营

千万级考试管理系统的考试试卷存储方案

白发青年

架构实战营

一种不通过UI给C4C自定义BO创建测试数据的方式

汪子熙

CRM SAP C4C Cloud for Customer

SAP CRM中间件里的CSA队列有什么用

汪子熙

中间件 消息中间件 CRM SAP

CRM数据库表COM_TA_R3_ID的数据来源

汪子熙

中间件 CRM SAP abap

架构训练营模块四作业

Geek_e0c25c

架构训练营

模块4作业 千万级学生管理系统考试试卷存储方案

TH

架构实战营

第四次作业 设计千万级学生管理系统的考试试卷存储方案

函数方程

SAP ABAP的权限检查跟踪(Authorization trace)工具使用步骤介绍

汪子熙

SAP abap Authorization Authentication

第四次作业

Geek_9cf7b5

谣言粉碎机 - 极短时间内发送两个Odata request,前一个会自动被cancel掉?

汪子熙

JavaScript SAP SAP UI5

同时开左右两个SAPGUI编辑器显示同一段ABAP代码

汪子熙

SAP abap SAPGUI

中间件事务码R3AC1里Block Size的含义

汪子熙

中间件 CRM SAP abap

架构实战营 - 模块4- 作业

笑春风

Flink的Time与Window

五分钟学大数据

大数据 5月日更

Scrum Team不等于Development Team——《Scrum指南》重读有感(2)

Bruce Talk

Scrum 敏捷 随笔 Agile

【Flutter 专题】123 图解简易 GroupList 二级分组列表

阿策小和尚

5月日更 Flutter 小菜 0 基础学习 Flutter Android 小菜鸟

千万级学生管理系统的考试试卷存储方案

颜培攀

架构实战营

如何处理错误信息 Pricing procedure could not be determined

汪子熙

CRM SAP

模块四作业 - 考试试卷存储方案

张大彪

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