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 to
type 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章