javascript - trabaja - argumentos de función abierta con TypeScript
retorno javascript (3)
Además de @chuckj answer: también puede usar una expresión lambda en TypeScript
function sum(...nums: number[]): number {
return nums.reduce((a, b) => a + b, 0);
}
IMO, una de las principales preocupaciones del lenguaje TypeScript es admitir el código JavaScript existente. Esta es la impresión que tuve a primera vista. Eche un vistazo a la siguiente función de JavaScript que es perfectamente válida:
Nota: No estoy diciendo que me gusta este enfoque. Solo digo que este es un código JavaScript válido.
function sum(numbers) {
var agregatedNumber = 0;
for(var i = 0; i < arguments.length; i++) {
agregatedNumber += arguments[i];
}
return agregatedNumber;
}
Entonces, consumimos esta función con cualquier cantidad de argumentos:
console.log(sum(1, 5, 10, 15, 20));
Sin embargo, cuando pruebo esto con TypeScript Playground , da errores de tiempo de compilación.
Estoy asumiendo que esto es un error. Supongamos que no tenemos problemas de compatibilidad. Entonces, ¿hay alguna forma de escribir este tipo de funciones con argumentos abiertos? ¿Tal como la característica de params
en C #?
En Typescript es el concepto de Rest Parameter , es el parámetro que recibe múltiples valores de tipo similar. Si apuntáramos al mecanografiado, entonces tenemos que escribir el código ECMAScript 6 estándar, luego el transcriptor mecanografiado lo convierte a su código de script java equivalente ( que es el estándar ECMAScript 5 ). Si usamos un texto mecanografiado, entonces tenemos que usar tres puntos (...) preferx con el nombre de la variable restparameter, como función sum (... numbers: número []), entonces funcionaría.
Nota: El parámetro de reposo debe ser el último parámetro en la lista de parámetros. Igualmente, la función suma (nombre: cadena, edad: número, ... números: número []).
La forma de hacerlo de TypeScript es colocar el operador de puntos suspensivos ( ...
) antes del nombre del argumento. Lo anterior se escribiría como,
function sum(...numbers: number[]) {
var aggregateNumber = 0;
for (var i = 0; i < numbers.length; i++)
aggregateNumber += numbers[i];
return aggregateNumber;
}
Esto luego tecleará verificar correctamente con
console.log(sum(1, 5, 10, 15, 20));