TypeScript nepodporuje klíčové slovo/objekt/pole arguments v metodě. Místo toho ale zavádí speciální definici v hlavičce metody a ta vypadá například takto: …args:string[]. Tři tečky definují, že od tohoto parametru jich můžete do metody vložit kolik jen bude libo.
string je typ, který musí mít všechny objekty předané do této “hromadné” proměnné. Pokud chcete házet různé typy, zvolte typ any ale pak zapomeňte na jakoukoliv Intellisense, pokud z něj neuděláte zase jiný typ. Za datovým typem(zde string) už jen napíšete [] jako deklaraci pole.
Je logické, že args(nebo podle vašeho pojmenování) argument může být v každé metodě pouze jeden. To je logické a mimochodem stejné jako u deklarace v hlavičce metody C# params string[] args. Pokud to neuděláte, soubor se nezkompiluje do JS. Když jsme zase u názvu parametru, nemůže to být arguments, které je “klíčové pole” v každé metodě JS.
Pokud byste přece nechali arguments, kompilátor by vám to dal náležitě najevo: “Duplicate identifier ‘arguments’. Compiler uses ‘arguments’ to initialize rest parameters.” Do … argumentů se nepočítají předchozí parametry metody. A teď praktické ukázky kódu, když v TypeScriptu napíšete…:
CODEclass HtmlGenerator {
text: string;
WriteNonPairTagWithAttrs(tag: string, ...args: string[]) {
alert(args.join(" "));
}
}
var hg = new HtmlGenerator();
hg.WriteNonPairTagWithAttrs("a", "Hello", "Javascript", "World");
…vznikne po kompilaci toto:
CODEvar HtmlGenerator = (function () {
function HtmlGenerator() {
}
HtmlGenerator.prototype.WriteNonPairTagWithAttrs = function (tag) {
var args = [];
for (var _i = 0; _i < (arguments.length - 1); _i++) {
args[_i] = arguments[_i + 1];
}
alert(args.join(" "));
};
return HtmlGenerator;
})();
var hg = new HtmlGenerator();
hg.WriteNonPairTagWithAttrs("a", "Hello", "Javascript", "World");
Jak tedy sami vidíte, typescript si sám vytvoří pole podle názvu vašeho “args” parametru a zkopíruje do něj všechny hodnoty z pole arguments, které si JS vytváří sám v každé metodě. A ještě jak toto zobrazí prohlížeč:
