TypeScript发布3.2版本,改进元编程支持、新增BigInt

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

你可能感兴趣的:(TypeScript发布3.2版本,改进元编程支持、新增BigInt)