163

IMO,TypeScript语言的主要关注点之一是支持现有的 vanilla JavaScript 代码。这是我第一眼的印象。看看以下完全有效的 JavaScript 函数:

注意:我并不是说我喜欢这种方法。我只是说这是一个有效的 JavaScript 代码。

function sum(numbers) { 

    var agregatedNumber = 0; 
    for(var i = 0; i < arguments.length; i++) { 
        agregatedNumber += arguments[i];
    }

    return agregatedNumber;
}

因此,我们使用任意数量的参数来使用这个函数:

console.log(sum(1, 5, 10, 15, 20));

但是,当我使用TypeScript Playground进行尝试时,它会出现编译时错误。

我假设这是一个错误。假设我们没有兼容性问题。那么,有没有办法用开放式参数编写这种类型的函数呢?比如paramsC#中的特性?

4

3 回答 3

311

TypeScript 的做法是将省略号运算符 ( ...) 放在参数名称之前。上面会写成,

function sum(...numbers: number[]) {
    var aggregateNumber = 0;
    for (var i = 0; i < numbers.length; i++)
        aggregateNumber += numbers[i];
    return aggregateNumber;
}

然后,这将正确键入检查

console.log(sum(1, 5, 10, 15, 20));
于 2012-10-02T19:57:08.073 回答
11

除了@chuckj 回答:您还可以在 TypeScript 中使用 an (在 Java / .NET 中arrow function expression是一种 a )lambda

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}
于 2017-03-19T09:37:11.590 回答
6

在 Typescript 中它是Rest Parameter的概念,它是接收多个相似类型值的参数。如果我们以 typescript 为目标,那么我们必须编写代码ECMAScript 6标准,然后 typescript transpiler 将其转换为等效的 java 脚本代码(这是ECMAScript 5标准)。如果我们使用 typescript,那么我们必须使用三个 dot(...) preferx 和 restparameter 变量名称,例如函数 sum(...numbers: number[]),然后它会起作用。

注意: Rest Parameter 必须是参数列表中的最后一个参数。类似函数 sum(name:string,age:number,...numbers: number[])。

于 2018-05-10T06:56:14.223 回答