Vyhledávání na webu

javascript - otevřené funkční argumenty s TypeScriptem


Podle mého názoru je jedním z hlavních cílů jazyka TypeScript podpora existujícího čistého JavaScriptového kódu. To je dojem, který jsem měl na první pohled. Podívejte se na následující JavaScriptovou funkci, která je naprosto platná:

Poznámka: Neříkám, že se mi tento přístup líbí. Jen říkám, že se jedná o platný kód v JavaScriptu.

function sum(numbers) { 

    var agregatedNumber = 0; 
    for(var i = 0; i < arguments.length; i++) { 
        agregatedNumber += arguments[i];
    }

    return agregatedNumber;
}

Takže tuto funkci používáme s libovolným počtem argumentů:

console.log(sum(1, 5, 10, 15, 20));

Avšak když to vyzkouším v TypeScript Playground, zobrazí se chyby při překladu.

Předpokládám, že se jedná o chybu. Předpokládejme, že nemáme problémy s kompatibilitou. Existuje pak nějaký způsob, jak psát tento typ funkcí s otevřenými argumenty? Například tak, jako je funkce params v C#?

Odpověď č. 1

TypeScript způsob, jak to udělat, je umístit operátor elipsy (...) před název argumentu. Výše uvedené by bylo napsáno jako,

function sum(...numbers: number[]) {
    var aggregateNumber = 0;
    for (var i = 0; i < numbers.length; i++)
        aggregateNumber += numbers[i];
    return aggregateNumber;
}

To se pak bude správně kontrolovat typem s

console.log(sum(1, 5, 10, 15, 20));

Odpověď č. 2

K odpovědi @chuckj: Můžete také použít arrow function expression v TypeScriptu (je to něco jako lambda v Java/.NET)

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

Související články