Вопрос:

открытые аргументы функции с TypeScript

javascript typescript

65652 просмотра

3 ответа

38174 Репутация автора

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функция в C #?

Автор: tugberk Источник Размещён: 02.10.2012 07:52

Ответы (3)


241 плюса

19517 Репутация автора

Решение

Способ 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));
Автор: chuckj Размещён: 02.10.2012 07:57

4 плюса

834 Репутация автора

В дополнение к ответу @chuckj: Вы также можете использовать arrow function expressionв TypeScript (это своего рода lambdaв Java / .NET)

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}
Автор: Jeroen van Dijk-Jun Размещён: 19.03.2017 09:37

3 плюса

773 Репутация автора

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

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

Автор: Sheo Dayal Singh Размещён: 10.05.2018 06:56
Вопросы из категории :
32x32