使用 TypeScript 的开放式函数参数

2022-08-30 02:10:38

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


答案 1

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

答案 2

除了@chuckj答案:你还可以在TypeScript中使用一个(有点像Java / .NET中的一个)arrow function expressionlambda

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