открытые аргументы функции с помощью TypeScript
ИМО, одна из главных проблем 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, это дает ошибки времени компиляции.
Я предполагаю, что это ошибка. Предположим, что у нас нет проблем с совместимостью. Тогда, есть ли способ написать этот тип функций с открытыми аргументами? Например,params
функции в C#?
3 ответа:
типографский способ сделать это-разместить оператор многоточия (
...
) перед именем аргумента. Выше будет написано как,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));
В дополнение к @chuckj ответ: вы также можете использовать
arrow function expression
в TypeScript (это своего родаlambda
в Java / .NET)function sum(...nums: number[]): number { return nums.reduce((a, b) => a + b, 0); }
в машинописном тексте это понятие Параметра, это параметр, который принимает несколько значений аналогичного типа.Если мы нацелены на машинопись, то мы должны написать код ECMAScript 6 standard, затем TypeScript transpiler преобразует его в эквивалентный код Java-скрипта (который ECMAScript 5 стандартные).Если мы используем typescript, то мы должны использовать три точки(...) preferx с именем переменной restparameter, например function sum(...числа: число []), то это будет работать.
Примечание: Параметр остаток должен быть последним параметром в списке параметров.аналогично функции sum(имя:строка,возраст:число...numbers: number []).