In Typoskript Wie erkläre ich eine Reihe von Funktionen, die eine Zeichenfolge und gibt eine Zeichenfolge akzeptieren?

stimmen
19

UPDATE - der Kontext dieser Frage wurde vorge Typoskript 1.4. Seit dieser Version, meine erste Vermutung wird von der Sprache unterstützt. Siehe das Update auf die Antwort.


Ich kann erklären , feine Funktion zu sein , die eine Zeichenfolge annimmt und gibt einen String zurück:

var f : (string) => string

Und ich kann erklären , gein Array von String zu sein:

var g : string[]

Wie kann ich erklären , hein Array von sein „Funktion , die eine Zeichenfolge annimmt und gibt einen String zurück“?

Meine erste Vermutung:

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

Das scheint ein Syntaxfehler zu sein. Wenn ich die zusätzliche Klammern wegzunehmen, dann ist es eine Funktion von String-Array von String.

Veröffentlicht am 03/10/2012 um 11:01
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
38

Ich habe es herausgefunden. Das Problem ist , dass die =>für eine Funktion Typen wörtlichen ist selbst nur syntaktischer Zucker und will nicht mit komponieren [].

Da die Spezifikation sagt:

Ein Funktionstyp literal der Form

(ParamList) => Return

literal ist genau auf den Objekttyp äquivalent

{(ParamList): Return}

Also, was ich will, ist:

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

Komplettes Beispiel:

var f : (string) => string

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

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

h = [];

h.push(f);

Update :

Geht man von diesen changeset Klammern wird in Typdeklarationen in 1.4 erlaubt sein, so dass die „erste Vermutung“ in der Frage wird auch als richtig:

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

Aktualisieren Sie weiter Es ist in 1.4!

Beantwortet am 03/10/2012 um 12:00
quelle vom benutzer

stimmen
0

Auf der Grundlage Ihrer Forschung schrieb ich eine kleine 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();
Beantwortet am 31/03/2014 um 10:19
quelle vom benutzer

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