50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

发布了 545 篇内容, 共 390.6 次阅读, 收获喜欢 721 次。

关注

评论

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

大模型真的会“好事多模”吗?

白洞计划

多模态 大模型

什么是多运行时架构?

互联网工科生

分布式 服务化 单机

Last Week in Milvus

Zilliz

非结构化数据 开源社区 Milvus Zilliz

【我与openGauss的故事系列】奇思妙想——通过Go语言自制安装openGauss二进制程序(一)

daydayup

阿里云率先荣获容器集群稳定性先进级认证

阿里巴巴云原生

阿里云 云原生 容器服务

【AI模型系列】中国AI大模型峰会“封神之作”,不容错过的大模型机遇

颜淡慕潇

AI大模型 峰会 WAVE SUMMIT

分布式系统常见理论讲解

越长大越悲伤

分布式 后端 一致性

统一观测|借助 Prometheus 监控 ClickHouse 数据库

阿里巴巴云原生

阿里云 云原生 Prometheus Clickhouse

RocketMQ 在业务消息场景的优势详解

阿里巴巴云原生

阿里云 RocketMQ 云原生

作为新手小白,你应该了解的五个3DMAX的使用干货小技巧!

Finovy Cloud

3ds Max

代码随想录Day23 - 二叉树(九)

jjn0703

加强Web应用程序安全:防止SQL注入

树上有只程序猿

sql Web ORM

火山引擎数智平台旗下DataWind升级半年报 6大功能助力企业数据消费

字节跳动数据平台

数据库 大数据 企业号 8 月 PK 榜

直播预告 | 博睿学院:探索ES在日志场景的应用

博睿数据

可观测性 博睿数据 智能运维AIOps 博睿学院

面向金融科技方向选手!一级学会背书,AI选股与可视分析大赛来啦

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

开放原子开源基金会理事长孙文龙一行赴山东大学考察交流

开放原子开源基金会

开源 开放原子开源基金会

Seata 1.7.0 正式发布,大幅度提升稳定性

阿里巴巴云原生

阿里云 云原生 seata

代码随想录Day35 - 贪心算法(四)

jjn0703

开放原子开源基金会理事长孙文龙一行赴浪潮考察交流

开放原子开源基金会

开源

如何在Windows上将iOS应用上传到App Store

文心大模型企业应用私享会·上海站:共话大模型前沿技术与产业应用创新

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

3分钟全面了解API Moke

优测云服务平台

Mock API 编排 Mock 服务 API 接口 API 测试

【参赛有奖】云原生编程挑战赛·赛道 2 邀你来战!

阿里巴巴云原生

阿里云 阿里云云原生

TE智库 |《中国CLM(合同全周期管理)市场产业全景研究报告》发布,看合同管理赋能企业战略落地

TE智库

证券机构数据治理实践,实现数据的“管、 治、用”

袋鼠云数栈

数字化转型 金融

信科技AntDB数据库专家参加向量数据库首次技术标准研讨会

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 7 月 PK 榜

Footprint Analytics 宣布 20+ 链 API 免费增速,助力熊市 buidler

Footprint Analytics

区块链 NFT Footprint

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