Dactilografiat cum pot declara o serie de funcții care acceptă un șir de caractere și returnează un șir de caractere?

voturi
19

UPDATE - contextul acestei întrebări a fost pre-1.4 masina de scris. Din moment ce această versiune, prima mea presupunere a fost susținută de limba. A se vedea actualizarea răspunsul.


Pot declara fa fi o funcție care acceptă un șir de caractere și returnează un șir de caractere:

var f : (string) => string

Și eu pot declara gsă fie o matrice de coarde:

var g : string[]

Cum pot declara hsă fie o matrice de „funcție care acceptă un șir de caractere și returnează un șir de caractere“?

Prima mea presupunere:

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

Aceasta pare a fi o eroare de sintaxă. Dacă am lua parantezele atunci este o funcție de la șir la matrice șir.

Întrebat 03/10/2012 la 11:01
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
38

Mi-am dat seama. Problema este că =>pentru un tip de funcție literală este ea însăși de zahăr doar sintactic și nu vrea să compună cu [].

După cum spec spune:

Un tip funcție literală a formularului

(ParamList) => returnType

este exact echivalentă cu tipul de obiect literal

{(ParamList): returnType}

Deci, ceea ce vreau este:

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

exemplu complet:

var f : (string) => string

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

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

h = [];

h.push(f);

Actualizare :

Judecând din această changeset parantezele vor fi permise în declarațiile de tip în 1,4, astfel încât „prima ghici“ în întrebare va fi , de asemenea corectă:

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

Actualiza în continuare Este în 1,4!

Publicat 03/10/2012 la 12:00
sursa de către utilizator

voturi
0

Bazat pe cercetare am scris un pic de clasa 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();
Publicat 31/03/2014 la 10:19
sursa de către utilizator

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