Daktilo nasıl bir dize kabul etmek ve bir dize döndürür işlevleri içeren bir dizi ilan ediyorum?

oy
19

GÜNCELLEME - Bu sorunun bağlamı öncesi typescript 1.4 idi. O sürüme beri, benim ilk tahminim dili ile desteklenen edilmiştir. Cevap güncelleştirme bakın.


Ben ilan edebilir fbir dize kabul eder ve bir dize döndüren bir işlev olarak:

var f : (string) => string

Ve ilan edebilir gdize dizisi olmaya:

var g : string[]

Nasıl ilan edebilir hbir dize kabul eder ve bir dize döndürür fonksiyonu dizisi olmaya?

Benim ilk tahminim:

var h : ((string) => string)[]

Bu bir sözdizimi hatası gibi görünüyor. Fazladan parantez götürmek, o zaman dizesinden dize dizisine bir fonksiyondur.

Oluştur 03/10/2012 saat 11:01
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
38

Bunu anladım. Sorun olmasıdır =>değişmez bir işlev türü için sadece sözdizimsel şeker kendisini ve birlikte oluşturmak istemiyor [].

Spec dediği gibi:

formun değişmez bir fonksiyonu tipi

(ParamList) => returnType

hazır nesne türüne tam olarak eşdeğer olan

{(ParamList): returnType}

Yani ne istiyor geçerli:

var h : { (s: string): string; }[]

Komple örnek:

var f : (string) => string

f = x => '(' + x + ')';

var h : { (s: string): string; }[]

h = [];

h.push(f);

Güncelleme :

Bakılırsa bu değişiklik kümesi parantez 1.4 tip beyanlarında izin verilecek, böylece söz konusu "ilk tahmin" de doğru olacaktır:

var h: ((string) => string)[]

Ayrıca güncelleme O 1.4 var!

Cevap 03/10/2012 saat 12:00
kaynak kullanıcı

oy
0

senin araştırmalara dayanarak Biraz sınıf PlanetGreeter / SayHello yazdı: `

/* PlanetGreeter */

class PlanetGreeter {
    hello    : { () : void; } [] = [];
    planet_1 : string = "World";
    planet_2 : string = "Mars";
    planet_3 : string = "Venus";
    planet_4 : string = "Uranus";
    planet_5 : string = "Pluto";
    constructor() {
        this.hello.push( () => { this.greet(this.planet_1); } );
        this.hello.push( () => { this.greet(this.planet_2); } );
        this.hello.push( () => { this.greet(this.planet_3); } );
        this.hello.push( () => { this.greet(this.planet_4); } );
        this.hello.push( () => { this.greet(this.planet_5); } );
    } 
    greet(a: string): void { alert("Hello " + a); }
    greetRandomPlanet():void { 
        this.hello [ Math.floor( 5 * Math.random() ) ] (); 
    } 
} 
new PlanetGreeter().greetRandomPlanet();
Cevap 31/03/2014 saat 10:19
kaynak kullanıcı

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