TypeScript 团队发布了 TypeScript 3.2 版本,改进了对各种元编程模式、泛型类型的“对象扩展(Object spread)”和“对象截取(Object rest)”支持。该版本还引入了BigInt,为支持 3 阶段 ECMAScript 提案的环境提供支持。
TypeScript 3.2 针对 bind、call 和 apply 增加了更为严格的类型检查,还增加了一个对完全支持“可变方法(Variadic Kinds)”而言其中一个非常重要的部分。TypeScript 项目经理 Daniel Rosenwasser 解释了这些额外的类型检查的重要性:
在 JavaScript 中,bind、call 和 apply 是定义在函数上的方法,它们使我们可以做这样的事,如绑定 this、部分地应用参数、调用具有不同 this 值的函数、调用具有数组参数的函数。
TypeScript 以前并不能严格地检查这些函数,每一个 bind、call 和 apply 都被判定为可以接受任意数量的参数并返回任意类型。先前有两个特性支持准确判断 bind、call 和 apply 的类型所需的抽象:
this 参数类型(TypeScript 2.0)
使用元组类型设计参数列表(TypeScript 3.0)
TypeScript 3.2 版本引入了一个新标识 strictBindCallApply,它新增了两个全局类型,用于声明更严格的 bind、call 和 apply 方法签名:
CallableFunction——可调用对象上的方法;
NewableFunction—— 可构造但不可调用对象上的方法。
在使用复杂的元编程或者类似在类实例内绑定方法这样的简单模式时,TypeScript 团队希望这个特性可以帮助捕获 Bug。
对象扩展和对象截取是 ES2015 中两个应用广泛的特性,大多数 TypeScript 版本都支持,但直到这个版本才提供泛型类型。
对于对象扩展的情况,TypeScript 无法表示从泛型类型返回的类型,因此,就没有机制可以表示两种未知的类型扩展成一个新类型。现在,TypeScript 3.2 提供了面向泛型的对象扩展,使用交集类型设计了这个功能。
对于对象截取的情况,不是使用某些额外/重写的属性创建一个新对象,而是创建一个缺少某些具体属性的新对象。不过,经过深思熟虑,TypeScript 团队认识到,现有的辅助类型 Pick 和 Exclude 提供了在泛型类型上进行对象截取的能力。
BigInt 支持基本完成,有望成为 ES2019 标准的一部分。BigInt 允许处理任意大的整数。TypeScript 3.2 增加了 BigInt 类型检查,并通过 TypeScript 编译目标 esnext 在支持 BigInt 的环境中生成 BigInt 常量。
由于 BigInt 引入了不同的数学运算符行为,TypeScript 团队短时间内不计划对不支持 BigInt 的环境提供向下支持。目前,这意味着 BigInt 支持只对 Node.js 11+、Chrome 67+以及基于类似 Chromium 版本的浏览器有效。Firefox、Safari 和 Edge 都报告说在实现 BigInt 支持。
TypeScript 3.2 的其他改进包括:
允许在联合类型判别式中使用“非单元(non-unit)”类型;
支持 JavaScript 中的 Object.defineProperty 属性赋值;
支持使用–showConfig 把隐含配置对象输出到控制台;
改进列表和链接调用的格式和缩进;
使用 dts-gen 为本地 @types 包搭建脚手架;
添加中间 unknown 类型断言;
添加漏掉的 new 关键字。
要详细了解有关 TypeScript 3.2 版本的所有更改,请查看TypeScript路线图。
有关 TypeScript 3.3 的工作已经开始,Partial 类型参数推断是第一个计划加入的特性。这一变化将允许下划线“_”以占位符的形式出现在类型参数列表中,作为要进行类型推断的位置,使用户可以在不显式截取的情况下重写默认列表中的变量,或者允许从另一个类型变量进行类型变量的推断。
在 TypeScript 路线图上,另外一个可能出现在 TypeScript 3.3 中的重要特性是与 ES 装饰器提案的最新变化保持一致。
TypeScript 是一个开源软件,遵循 Apache 2 许可协议。欢迎大家通过TypeScript GitHub项目进行贡献和反馈。如果是贡献,请务必遵守TypeScript贡献指南和微软开源代码规范。
查看英文原文:
https://www.infoq.com/news/2018/11/typescript-3-2-release-bigint
评论 1 条评论