Typescript ile açık uçlu fonksiyon argümanları

oy
82

IMO, ana kaygılarından birisi typescript dili JavaScript kodu mevcut vanilya desteklemektir. Bu benim ilk bakışta vardı izlenim. Mükemmel geçerlidir aşağıdaki JavaScript işlevi bir göz atın:

Not: Ben bu yaklaşımı gibi söylemiyorum. Sadece bu geçerli bir JavaScript kodu söylüyorum.

function sum(numbers) { 

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

    return agregatedNumber;
}

Yani, biz bağımsız değişken herhangi bir sayı ile bu işlevi tüketmek:

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

Ben bu denemek Ancak typescript Oyun , zaman derleme hataları verir.

Bunun bir hata olduğunu varsayıyorum. En biz uyumluluk sorunları yok olduğunu varsayalım. Sonra, açık uçlu argümanlarla fonksiyonların bu tip yazmak için herhangi bir yolu var mı? Mesela paramsC # özellik?

Oluştur 02/10/2012 saat 20:52
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
195

Bunu yapmanın typescript yolu (üç nokta operatörünü yerleştirmektir ...argümanı adı önce). Yukarıda olarak yazılabilir olur,

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

Sonra bu ile düzgün kontrol tipi olacaktır

console.log(sum(1, 5, 10, 15, 20));
Cevap 02/10/2012 saat 20:57
kaynak kullanıcı

oy
2

@chuckj cevap ek olarak: Ayrıca daktilo bir lambda ifade kullanabilirsiniz

function sum(...nums: number[]): number {
    return nums.reduce((a, b) => a + b, 0);
}
Cevap 19/03/2017 saat 09:37
kaynak kullanıcı

oy
0

Daktilo bu kavramı istirahat parametre , bu biz kodu yazmak zorunda sonra typescript hedef benzer type.If birden değerleri alır parametredir ECMAscript 6 standart, daha sonra daktilo transpiler (eşdeğer Java komut kodu dönüştürür hangi ECMAScript 5 biz böyle fonksiyon toplamı olarak, restparameter değişken adıyla üç nokta (...) preferx kullanmak zorunda ardından typescript kullanmak .Eğer standart) (... numaraları: numarası []), o zaman çalışacak.

Not: istirahat Parametre son parametre list.likewise fonksiyonu toplamında parametre olmalıdır (: string, yaş: sayı, ... numaraları: adı numarası []).

Cevap 10/05/2018 saat 06:56
kaynak kullanıcı

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