26

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

 5 years ago
source link: http://www.infoq.com/cn/news/2018/10/typescript-mappable-tuple-array?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

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

根据TypeScript博客所述:

stringifyAll函数可以接受任意数量的值,将每个元素转换为字符串,将每个结果放在一个新数组中,然后返回该数组。如果我们想要stringifyAll具有最通用的类​​型,需要将其声明为:

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

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

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

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

根据TypeScript博客所述:

从技术层面看,行为可以保持一致,我们团队的大部分人认为这种用法是没有问题的。在迭代元组和数组时,映射对象类型现在可以“做正确的事”,并没有引入用于映射元组的新概念。这意味着如果你已经在使用现有的映射类型(如Partial或者lib.d.ts中的Required),它们会立即自动处理元组和数组。虽然非常通用,但你可能会注意到这个功能意味着TypeScript现在可以更好地表达类似于Promise.all的函数。虽然这一变更尚未被包含在这一版本中,但会在不久的将来出现。

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK