
上QQ阅读APP看书,第一时间看更新
1.3.6 使用REST处理可变数量的参数
关于REST,我们最后来看看函数具有REST参数的情况。REST参数与REST属性并不相同,但是语法上非常相似,所以学习起来应该很容易。REST参数解决的是向函数传入可变数量的参数的问题。在函数中,REST参数用数组的形式表示,并且其前面带有省略号。
在本例中,我们将输出一个标题,后面跟有instruments的一个变量数:

因为REST参数是一个数组,所以允许使用数组函数,这意味着我们可以直接对其使用forEach等操作。要重点注意的是,REST参数与JavaScript函数内的实参对象是不同的;REST参数自参数列表中未被命名的值开始,而实参对象则包含全部实参的列表。
因为ES5不支持REST参数,所以TypeScript做了一些必要的工作,使得生成的JavaScript能够模拟REST参数。首先,我们来看看编译成ES5时的代码:

查看由ES2015编译得到的JavaScript(需要在tsconfig.json文件中将target改为ES2015),可以看到它与我们的TypeScript代码完全一样:

需要重点强调的是,查看生成的JavaScript十分重要。TypeScript非常擅长隐藏复杂的处理,不让我们看到,但是我们真的应该熟悉生成的JavaScript。使用不同版本的ECMAScript标准进行编译,然后查看生成的代码,对于理解底层过程很有帮助。