argumentos de la función indefinidos con mecanografiado

votos
82

OMI, una de las principales preocupaciones de la mecanografiado lenguaje es apoyar la vainilla vigente código JavaScript. Esta es la impresión que tuve a primera vista. Echar un vistazo a la siguiente función de JavaScript que es perfectamente válido:

Nota: No estoy diciendo que me gusta este enfoque. Sólo estoy diciendo que esto es un código JavaScript válida.

function sum(numbers) { 

    var agregatedNumber = 0; 
    for(var i = 0; i < arguments.length; i++) { 
        agregatedNumber += arguments[i];
    }

    return agregatedNumber;
}

Por lo tanto, se consume esta función con cualquier número de argumentos:

console.log(sum(1, 5, 10, 15, 20));

Sin embargo, cuando intento esto con mecanografiado infantil , da errores de compilación de tiempo.

Estoy asumiendo que esto es un error. Vamos a suponer que no tenemos los problemas de compatibilidad. Entonces, ¿hay alguna manera de escribir este tipo de funciones con argumentos de tipo abierto? Tal como paramscaracterística de C #?

Publicado el 02/10/2012 a las 20:52
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
195

La forma mecanografiada de hacer esto es colocar el operador de puntos suspensivos ( ...) antes de que el nombre del argumento. Lo anterior se puede escribir como,

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

Esto, a continuación Tipo comprobar correctamente con

console.log(sum(1, 5, 10, 15, 20));
Respondida el 02/10/2012 a las 20:57
fuente por usuario

votos
2

Además de @chuckj respuesta: También puede utilizar una expresión lambda a máquina de escribir

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}
Respondida el 19/03/2017 a las 06:37
fuente por usuario

votos
0

En Letra de imprenta es el concepto de resto de parámetros , es el parámetro que recibe múltiples valores de type.If similares que apuntar el texto mecanografiado, entonces tenemos que escribir el código ECMAScript 6 estándar, entonces transpiler mecanografiado lo convierte a su código java script equivalente ( que es ECMAScript 5 estándar) .Si que utilizar texto mecanografiado, entonces tenemos que utilizar tres puntos (...) preferx con el nombre de la variable restparameter, como suma de funciones (... números: número []), luego de que funcionaría.

Nota: El resto de parámetros debe ser el último parámetro en función de la suma de parámetros list.likewise (name: String, edad: número, ... números: número []).

Respondida el 10/05/2018 a las 03:56
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more