2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

发布了 369 篇内容, 共 259.1 次阅读, 收获喜欢 640 次。

关注

评论

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

Python逆向之 eval 函数解析,看着一篇就会了,案例掌房

梦想橡皮擦

Python 爬虫 8月月更

使用类似搭积木的低代码开发方式进行 SAP API 开发

汪子熙

低代码 云平台 SAP 8月月更 low-code

分分钟快速定制您的专属个性化软件应用——BizTool自动化工具简介

BizFree

软件开发 快速开发 低代码开发 个性化 应用开发

Dapr在Java中的实践 之 环境准备

万猫学社

微服务 dapr Sidecar

2022秋招前端面试题(六)(附答案)

helloworld1024fd

前端面试题

「控制反转」和「依赖倒置」,傻傻分不清楚?

蝉沐风

ioc 依赖倒置原则 DIP DI 控制反转

如何用建木CI构建前端E2E质量自查

Jianmu

DevOps 前端 持续集成 代码质量 自动化测试

Redis 定长队列的探索和实践

vivo互联网技术

redis 数据结构 消息队列 Lua脚本

面试突击72:输入URL之后会执行什么流程?

王磊

Java 面试

STM32F103ZE+SHT30检测环境温度与湿度(IIC模拟时序)

DS小龙哥

8月月更

Kubernetes资源编排系列之四: CRD+Operator篇

阿里云大数据AI技术

大数据 运维

自动驾驶中的SLAM

博文视点Broadview

图数据科学和机器学习图数据科学GDS概览

flow

8月月更

开源一夏|Flutter实现搜索的三种方式

坚果

开源 OpenHarmony 8月月更

以技术御风险,护航云原生 | 同创永益 X 博云举办产品联合发布会

BoCloud博云

云计算 容器 云原生

在SAP分析云里根据业务数据绘制词云(Word Cloud)

汪子熙

SaaS SAP 词云 8月月更 word-cloud

一文读懂配置管理(CM)

SEAL安全

企业安全 企业it安全 代码安全

2022秋招前端面试题(五)(附答案)

helloworld1024fd

前端面试题

语音聊天app开发——对用户更具吸引力的设计

开源直播系统源码

软件开发 语聊房 开源源码 语音直播系统 语音源码

HMS Core分析服务智能运营6.5.1版本上线

HarmonyOS SDK

业务缓存之体系化设计与开发

Qunar技术沙龙

系统开发

Spring(五、注解开发)

开源 8月月更

K8S之Flannel的vxlan网络模式初步源码解析

k8s flannel 签约计划第三季

开源一夏 | 牛plus,多层嵌套动态JSON该如何解析总结

知识浅谈

开源 8月月更

左益豪:用代码创造一个新世界|OneFlow U

OneFlow

实习 社区之星

【LeetCode】受限条件下可到达节点的数目Java题解

Albert

LeetCode 8月月更

数据治理(三):数据质量管理

Lansonli

大数据 数据治理 8月月更

数据库不推荐使用外键的9个理由!

TimeFriends

8月月更

PWA 应用 Service Worker 缓存的一些可选策略和使用场景

汪子熙

typescript 前端开发 angular Service Worker 8月月更

Java 在Word中合并单元格时删除重复值

在下毛毛雨

java; 合并单元格 删除重复值

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