A macchina come faccio a dichiarare una serie di funzioni che accettano una stringa e restituire una stringa?

voti
19

UPDATE - il contesto di questa domanda è stato pre-dattiloscritto 1.4. Dal momento che la versione, la mia prima ipotesi è stata sostenuta dalla lingua. Vedere l'aggiornamento alla risposta.


Posso dichiarare fdi essere una funzione che accetta una stringa e restituisce una stringa:

var f : (string) => string

E posso dichiarare gdi essere un array di stringhe:

var g : string[]

Come posso dichiarare hdi essere una serie di funzione che accetta una stringa e restituisce una stringa?

La mia prima risposta:

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

Che sembra essere un errore di sintassi. Se mi togli le parentesi in più allora è una funzione da stringa a matrice di stringhe.

È pubblicato 03/10/2012 alle 11:01
fonte dall'utente
In altre lingue...                            


2 risposte

voti
38

L'avevo capito. Il problema è che il =>per un tipo letterale funzione è di per sé zucchero meramente sintattico e non vuole comporre con [].

Come le specifiche dice:

Un tipo letterale funzione della forma

(Paramlist) => ReturnType

è esattamente equivalente al tipo di oggetto letterale

{(Paramlist): ReturnType}

Quindi quello che voglio è:

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

esempio completo:

var f : (string) => string

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

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

h = [];

h.push(f);

Aggiornamento :

A giudicare da questo changeset parentesi sarà consentito nelle dichiarazioni di tipo a 1.4, quindi la "prima ipotesi" in questione sarà anche corretto:

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

Ulteriore aggiornamento E 'in 1.4!

Risposto il 03/10/2012 a 12:00
fonte dall'utente

voti
0

Sulla base della sua ricerca ho scritto un po 'di classe 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();
Risposto il 31/03/2014 a 10:19
fonte dall'utente

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