首页 文章

TypeScript的开放式函数参数

提问于
浏览
96

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尝试此操作时,它会产生编译时错误 .

我假设这是一个错误 . 让's assume that we don' t有兼容性问题 . 那么,有没有办法用开放式参数编写这种类型的函数?比如C#中的 params 功能?

3 回答

  • 228

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

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

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

  • 3

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

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

相关问题