аргументы открытые функций с машинописью

голоса
82

ИМО, одна из главных забот машинописи языка является поддержка существующей ванили 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));

Однако, когда я пытаюсь это с машинописью Playground , он дает ошибку компиляции времени.

Я предполагаю , что это ошибка. Давайте предположим , что у нас нет проблем с совместимостью. Тогда, есть ли способ , чтобы написать этот тип функций с открытыми концами аргументов? Такие , как paramsфункции в C #?

Задан 02/10/2012 в 20:52
источник пользователем
На других языках...                            


3 ответов

голоса
195

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

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));
Ответил 02/10/2012 в 20:57
источник пользователем

голоса
2

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

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}
Ответил 19/03/2017 в 09:37
источник пользователем

голоса
0

В машинописи этого понятие Rest параметра , это параметр , который принимает множество значений аналогичного type.If мы нацелены машинописное то мы должны написать код ECMAScript 6 стандарта, то машинописный transpiler преобразует его в коду сценария эквивалентен Java ( который ECMAScript 5 стандарт) .Если мы используем машинопись , то мы должны использовать три точки (...) preferx с именем переменной restparameter, такие как функция суммы (... числа: число []), то он будет работать.

Примечание: Rest Параметр должен быть последним параметром в функции суммы параметра list.likewise (имя: строка, возраст: число, ... число: число []).

Ответил 10/05/2018 в 06:56
источник пользователем

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