Аргументы функции открытого состояния с помощью TypeScript

IMO, одна из основных проблем 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 присутствует в С#?

Ответ 1

Способ TypeScript заключается в том, чтобы поместить оператор многоточия (...) перед именем аргумента. Вышеупомянутое будет записано как

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));

Ответ 2

В дополнение к ответу @chuckj: вы также можете использовать выражение лямбда в TypeScript

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}