UPDATE - the context of this question was pre-TypeScript 1.4. Since that version, my first guess has been supported by the language. See the update to the a
I figured it out. The problem is that the =>
for a function type literal is itself merely syntactic sugar and doesn't want to compose with []
.
As the spec says:
A function type literal of the form
( ParamList ) => ReturnType
is exactly equivalent to the object type literal
{ ( ParamList ) : ReturnType }
So what I want is:
var h : { (s: string): string; }[]
Complete example:
var f : (string) => string
f = x => '(' + x + ')';
var h : { (s: string): string; }[]
h = [];
h.push(f);
Update:
Judging from this changeset parentheses will be allowed in type declarations in 1.4, so the "first guess" in the question will also be correct:
var h: ((string) => string)[]
Further Update It is in 1.4!
Based on your research I wrote a little class 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();