TypeScript 3.1增加可映射元组和数组类型

TypeScript团队最近发布了TypeScript版本3.1,继3.0版本之后添加了可映射元组和数组类型以及其他一些改进。

几乎每个JavaScript应用程序都需要映射列表中的值,这种模式在ES2015中通过剩余参数进行了简化。

TypeScript团队提供的一个常见示例:

function stringifyAll(...elements) {
    return elements.map(x => String(x));
}

根据TypeScript博客所述:

declare function stringifyAll(...elements: unknown[]): Array<string>;

在这个例子中,函数接受任意数量的元素,并返回一个字符串数组,但是有关元素数量的类型信息将会丢失。以前的解决方案是重载函数定义,这样很不方便:

declare function stringifyAll(...elements: []): string[];
declare function stringifyAll(...elements: [unknown]): [string];
// ... etc.

TypeScript已在之前的版本中引入了映射对象类型,但不能完美应用于元组和数组类型。新版本的变化是这个方法现在可以按预期工作,而不会抛出异常。

根据TypeScript博客所述:

3.1版本的另一个重要补充是简化了在函数声明上指定属性。React用户对此应该很熟悉,它类似于defaultProps。

因为函数在JavaScript中也是对象,所以可以很容易地向函数添加属性。TypeScript最初的解决方案是使用命名空间,但在与ES模块一起用时带来了一些挑战,而且无法与var、let或const进行合并声明。

在TypeScript 3.1中,通过函数初始化进行的函数声明或const声明都会导致类型检查器分析父作用域,以便跟踪新添加的属性。

3.1版本还包含了很多其他较小的变更和增强功能。

在3.1版本之外,TypeScript 3.2版本将带来更多改进。最大的一个改进是函数的严格绑定、调用和方法应用,这是社区近四年前要求添加的复杂增强功能。这个增强解决了部分与变元相关的问题,变元相关问题是支持高阶函数类型最具挑战性的问题集合。BigInt支持也是3.2版本的一部分。

TypeScript是基于Apache 2许可的开源软件,可以通过TypeScript GitHub项目主页参与贡献和反馈。

查看英文原文TypeScript 3.1 Adds Mappable Tuple and Array Types

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址http://www.infoq.com/cn/news/2018/10/typescript-mappable-tuple-array
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券