Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有TypeScript的开放式函数参数_Javascript_Typescript - Fatal编程技术网

Javascript 带有TypeScript的开放式函数参数

Javascript 带有TypeScript的开放式函数参数,javascript,typescript,Javascript,Typescript,在我看来,该语言的主要关注点之一是支持现有的香草JavaScript代码。这是我第一眼看到的印象。看看下面的JavaScript函数,它非常有效: 注意:我并不是说我喜欢这种方法。我只是说这是一个 有效的JavaScript代码 但是,当我尝试使用时,会出现编译时错误 我假设这是一个bug。假设我们没有兼容性问题。那么,有没有办法用开放式参数编写这种类型的函数?例如,C#?中的params功能执行此操作的TypeScript方法是将省略号运算符(…)置于参数名称之前。上述内容应写成: funct

在我看来,该语言的主要关注点之一是支持现有的香草JavaScript代码。这是我第一眼看到的印象。看看下面的JavaScript函数,它非常有效:

注意:我并不是说我喜欢这种方法。我只是说这是一个 有效的JavaScript代码

但是,当我尝试使用时,会出现编译时错误


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

中的
params
功能执行此操作的TypeScript方法是将省略号运算符(
)置于参数名称之前。上述内容应写成:

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

除了@chuckj answer之外:您还可以在TypeScript中使用
箭头函数表达式
(在Java/.NET中是一种
lambda


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

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

太好了!谢谢。这绝对是正确的做法。因此,如果有人有我所问的现有代码,它将崩溃。对吗?是的。它会抱怨调用,但您可以通过将签名更改为sum(…)将sum声明为接受任何类型的多个参数取而代之的是,它将消除错误。请随意将此作为CodePlex上的错误提交。我们正在寻找一个rest参数示例。Ty。只是好奇,为什么您甚至有一个名为
numbers
的参数?您没有对它做任何处理。@JustinMorgan至少有一个参数让Intellisense至少提示应该有一些参数梅门特斯。
console.log(sum(1, 5, 10, 15, 20));
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));
function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}