открытые аргументы функции с помощью 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 89

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 []).