UPDATE -这个问题的上下文是pre-TypeScript 1.4。从那个版本开始,我的第一个猜测就得到了语言的支持。请查看答案的更新。
我可以将f
声明为一个接受字符串并返回字符串的函数:
var f : (string) => string
我可以将g
声明为字符串数组:
var g : string[]
如何将h
声明为“接受字符串并返回字符串的函数”的数组?
我的第一个猜测是:
var h : ((string) => string)[]
这似乎是一个语法错误。如果去掉多余的圆括号,它就是一个从字符串到字符串数组的函数。
发布于 2012-10-03 19:00:23
我想通了。问题是,函数类型文字的=>
本身仅仅是语法糖,并不想与[]
组合。
正如说明书所说:
表单的函数类型文字
( ParamList ) => ReturnType
完全等同于对象类型文本
{( ParamList ):ReturnType }
所以我想要的是:
var h : { (s: string): string; }[]
完整示例:
var f : (string) => string
f = x => '(' + x + ')';
var h : { (s: string): string; }[]
h = [];
h.push(f);
更新
从this changeset判断,1.4中的类型声明中将允许使用括号,因此问题中的“第一个猜测”也将是正确的:
var h: ((string) => string)[]
进一步更新它在1.4版本中!
发布于 2014-03-31 17:19:54
基于你的研究,我写了一个小类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();
https://stackoverflow.com/questions/12706161
复制相似问题