I Loggfila hvordan kan jeg erklære en rekke funksjoner som godtar en streng og returnerer en streng?

stemmer
21

UPDATE - sammenheng med dette spørsmålet var forhåndsLoggFila 1,4. Siden denne versjonen, har min første gjetning er støttet av språket. Se oppdateringen til svaret.


Jeg kan erklære få være en funksjon som aksepterer en streng og returnerer en streng:

var f : (string) => string

Og jeg kan erklære gå være en rekke streng:

var g : string[]

Hvordan kan jeg erklære hå være en rekke funksjon som aksepterer en streng og returnerer en streng?

Min første gjetning:

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

Det synes å være en syntaksfeil. Hvis jeg tar bort de ekstra parentes så er det en funksjon fra streng til rekke streng.

Publisert på 03/10/2012 klokken 10:01
kilden bruker
På andre språk...                            


2 svar

stemmer
40

Jeg fant det ut. Problemet er at =>for en funksjonstype bokstavelig er i seg selv bare syntaktisk sukker og ikke ønsker å komponere med [].

Som spec sier:

En funksjonstypen bokstavelig av skjemaet

(ParamList) => ReturnType

er nøyaktig ekvivalent med objekttypen bokstavelig

{(ParamList): ReturnType}

Så det jeg ønsker er:

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

Komplett eksempel:

var f : (string) => string

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

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

h = [];

h.push(f);

oppdatering :

Ut fra denne forandrings parentes vil bli tillatt i typen erklæringer i 1.4, så "første gjetning" i spørsmålet vil også være riktig:

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

Videre Oppdater Det er i 1.4!

Svarte 03/10/2012 kl. 11:00
kilden bruker

stemmer
0

Basert på forskning jeg skrev en liten klasse PlanetGreeter / sayHello: `

/* 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();
Svarte 31/03/2014 kl. 09:19
kilden bruker

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