带TypeScript的开放式函数参数

javascript typescript

65652 观看

3回复

IMO是TypeScript语言的主要关注点之一就是要支持现有的普通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#中的功能?

作者: tugberk 的来源 发布者: 2019 年 9 月 30 日

回应 (3)


241

决定

TypeScript这样做的方法是将省略号运算符(...)放在参数名称之前。以上将写为

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

然后,将正确键入check with

console.log(sum(1, 5, 10, 15, 20));
作者: chuckj 发布者: 02.10.2012 07:57

4

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

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}
作者: Jeroen van Dijk-Jun 发布者: 19.03.2017 09:37

3

在Typescript中,这是Rest Parameter的概念,它是接收相似类型的多个值的参数。如果我们以TypeScript为目标,则必须编写ECMAScript 6标准代码,然后Typescript编译器将其转换为等效的Java脚本代码(这是ECMAScript 5标准)。如果我们使用打字稿,则必须使用带有restparameter变量名称的三个点(...)Preferredx,例如函数sum(... numbers:number []),然后它将起作用。

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

作者: Sheo Dayal Singh 发布者: 10.05.2018 06:56
32x32