TypeScript的开放式函数参数

时间:2012-10-02 19:52:26

标签: javascript typescript

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进行尝试时,它会产生编译时错误。

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

3 个答案:

答案 0 :(得分:233)

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));

答案 1 :(得分:4)

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

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}

答案 2 :(得分:3)

在Typescript中它是 Rest Parameter 的概念,它是接收多个相似类型值的参数。如果我们定位打字稿,那么我们必须编写代码 ECMAScript 6 < / strong>标准,然后打字稿转换器将其转换为等效的java脚本代码( ECMAScript 5 标准)。如果我们使用typescript,那么我们必须使用三个点(...)preferx restparameter变量名,例如函数sum(... numbers:number []),那么它就可以工作。

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