Schrijfmachine hoe verklaar ik een scala aan functies die een string te accepteren en terug een string?

stemmen
19

UPDATE - het kader van deze vraag was pre-Typescript 1.4. Sinds die versie is mijn eerste gok ondersteund door de taal. Zie de update naar het antwoord.


Ik kan verklaren fnaar een functie die een string accepteert en retourneert een tekenreeks:

var f : (string) => string

En ik kan verklaren gom een array van de string zijn:

var g : string[]

Hoe kan ik verklaren hom een array van functie die een string accepteert en retourneert een string te zijn?

Mijn eerste gok:

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

Dat lijkt een syntax fout. Als ik de extra haakjes weg te nemen dan is het een functie van string array of string.

De vraag is gesteld op 03/10/2012 om 11:01
bron van user
In andere talen...                            


2 antwoorden

stemmen
38

Ik heb het uitgezocht. Het probleem is dat het =>voor een type functie letterlijke zelf alleen syntactische suiker en wil niet samen met [].

Omdat de spec zegt:

Een functietype letterlijke van het formulier

(ParamList) => returnType

exact overeen met het objecttype letterlijke

{(ParamList): returnType}

Dus wat ik wil is:

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

Volledig voorbeeld:

var f : (string) => string

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

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

h = [];

h.push(f);

update :

Afgaande op deze changeset haakjes zullen worden toegestaan in type declaraties in 1.4, dus de "eerste poging" in de vraag zal ook correct zijn:

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

Verder Werk Het is in 1.4!

antwoordde op 03/10/2012 om 12:00
bron van user

stemmen
0

Op basis van uw onderzoek schreef ik een klasje 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();
antwoordde op 31/03/2014 om 10:19
bron van user

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