最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

发布了 257 篇内容, 共 148.3 次阅读, 收获喜欢 576 次。

关注

评论

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

架构师的十八般武艺:风险管理

agnostic

风险管理

Linux操作系统——组管理和权限管理

胖虎不秃头

Linux 操作系统 10月月更

Linux操作系统——定时任务调度、磁盘分区与挂载、网络配置

胖虎不秃头

Linux 操作系统 10月月更

如何在 Linux 中删除超过 30 天的文件

wljslmz

Linux 10月月更

业务实时监控服务

穿过生命散发芬芳

10月月更 业务监控

【牛客刷题-算法】NC4 判断链表中是否有环

清风莫追

算法 10月月更

Qt中读取json文件以及总结

中国好公民st

c++ qt 10月月更

Linux操作系统——用户管理、实用指令

胖虎不秃头

Linux 10月月更

MyBatis 学习笔记之MyBatis入门开发

openpark

mybatis 10月月更 mybatis入门

Vue3入门指北(六)列表渲染

Augus

Vue3 10月月更

乐观锁和悲观锁

潜水员

并发

Python应用之计算阶乘

二哈侠

函数 10月月更 阶乘计算

【LeetCode】在LR字符串中交换相邻字符Java题解

Albert

LeetCode 10月月更

Python基础(六) | 面向对象类定义及特性详解

timerring

实例 10月月更

匿名网络追踪溯源机制及方法

郑州埃文科技

IP地址 追踪溯源 匿名网络

js事件循环与macro&micro任务队列-前端面试进阶

loveX001

JavaScript

Python基础(七) | 文件、异常以及模块详解

timerring

异常 模块 10月月更

Taurus: 面向机器学习的数据面架构

俞凡

人工智能 网络 自智网络

【从0到1学算法】2.递归

Geek_65222d

10月月更

Docker下,两分钟极速体验Nacos

程序员欣宸

Docker Spring Cloud 10月月更

【牛客刷题-算法】2-算法入门-栈的压入、弹出序列

清风莫追

算法 10月月更

【愚公系列】2022年10月 Go教学课程 016-运算符之逻辑运算符和其他运算符

愚公搬代码

10月月更

用30分钟相中10倍工程师

愚夫一得

面试 技术管理 招聘 文化 & 方法

[架构实战] 课后作业二

爱学习的麦子

【一Go到底】第二天---你好,Go and GOROOT&GOPATH

指剑

golang Go入门 10月月更

MyBatis 学习笔记之配置文件

openpark

mybatis 10月月更 mybatis配置文件

2022-10-02:以下go语言代码能否通过编译?A: 能;B: 不能;C: 不知道。 package main import ( “fmt“ ) type worker interfa

福大大架构师每日一题

golang 福大大 选择题

大数据ELK(十一):Elasticsearch架构原理

Lansonli

elasticsearch 10月月更

【牛客刷题-算法】3-第一篇-斐波拉契数列-C实现

清风莫追

递归 数据结构与算法、 10月月更

计算机网络——以太网交换机学习和转发帧

StackOverflow

编程 计算机网络 10月月更

架构师的十八般武艺:变更管理

agnostic

需求变更

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