代码之家  ›  专栏  ›  技术社区  ›  tugberk

具有TypeScript的开放式函数参数

  •  169
  • tugberk  · 技术社区  · 12 年前

    海事组织 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 ,它给出了编译时错误。

    我认为这是一个bug。让我们假设我们没有兼容性问题。那么,有什么方法可以用开放式参数编写这种类型的函数吗?例如 params C#中的功能?

    3 回复  |  直到 12 年前
        1
  •  320
  •   David Harkness    10 年前

    执行此操作的TypeScript方法是放置省略号运算符( ... )在参数名称之前。以上内容将被写成,

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

    然后,这将使用正确键入check

    console.log(sum(1, 5, 10, 15, 20));
    
        2
  •  11
  •   Jeroen van Dijk-Jun    6 年前

    除了@chukj答案:你也可以使用 arrow function expression 在TypeScript中(有点像 lambda 在Java/.NET中)

    function sum(...nums: number[]): number {
        return nums.reduce((a, b) => a + b, 0);
    }
    
        3
  •  6
  •   Sheo Dayal Singh    7 年前

    在打字中,它是 Rest参数 ,它是接收多个类似类型值的参数。如果我们以typescript为目标,那么我们必须编写代码 ECMA脚本6 标准,然后typescript转译器将其转换为等效的java脚本代码(即 ECMA脚本5 标准)。如果我们使用typescript,那么我们必须使用带有restparameter变量名的三点(…)preferrx,例如函数sum(…numbers:number[]),那么它就可以工作了。

    注: Rest Parameter必须是参数列表中的最后一个参数。likewise函数sum(名称:字符串,年龄:数字,…数字:数字[])。