Maszynopis w jaki sposób zadeklarować tablicę funkcji, które akceptują ciąg i zwraca ciąg?

głosy
19

UPDATE - kontekst tego pytania wstępnie maszynopis 1.4. Od tej wersji, moje pierwsze przypuszczenie zostało poparte przez język. Zobacz aktualizację na odpowiedź.


Mogę zadeklarować fbyć funkcja, która akceptuje ciąg i zwraca ciąg znaków:

var f : (string) => string

I mogę zadeklarować gjako tablicę z ciągiem:

var g : string[]

Jak mogę zadeklarować hbyć tablicą „funkcji, która akceptuje ciąg i zwraca ciąg znaków”?

Moje pierwsze przypuszczenie:

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

To wydaje się być błąd składni. Gdybym zabrać dodatkowe nawiasy to jest to funkcja z napisu na tablicy string.

Utwórz 03/10/2012 o 11:01
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
38

Rozgryzłem to. Problem polega na tym, że =>w odniesieniu do typu funkcji jest dosłownym sobie jedynie cukier syntaktyczny i nie chce, aby komponować z [].

Jako spec mówi:

Typ funkcji dosłownym formie

(ParamList) => ReturnType

jest dokładnie odpowiednikiem typu obiektu dosłownym

{(ParamList) ReturnType}

Więc to, co chcę jest:

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

Kompletny przykład:

var f : (string) => string

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

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

h = [];

h.push(f);

aktualizacja :

Sądząc z tego changeset nawiasach będą mogły w deklaracji typu w 1.4, więc „pierwsze przypuszczenie” w pytaniu będzie również poprawne:

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

Dalsze Aktualizacja jest w 1.4!

Odpowiedział 03/10/2012 o 12:00
źródło użytkownik

głosy
0

Na podstawie swoich badań napisałem trochę klasa 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();
Odpowiedział 31/03/2014 o 10:19
źródło użytkownik

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