定义TypeScriptcallbacktypes

我在TypeScript中有下面的类:

class CallbackTest { public myCallback; public doWork(): void { //doing some work... this.myCallback(); //calling callback } } 

我正在使用这样的类:

 var test = new CallbackTest(); test.myCallback = () => alert("done"); test.doWork(); 

该代码的工作原理,所以它按预期显示一个消息框。

我的问题是:有没有我可以提供我的类字段myCallback ? 现在,公共领域myCallbackanytypes如上所示。 我怎样才能定义callback的方法签名? 或者我可以只将types设置为某种callbacktypes? 或者我可以做些什么呢? 我必须使用any (隐式/显式)?

我尝试了这样的东西,但它没有工作(编译时错误):

 public myCallback: (); // or: public myCallback: function; 

我在网上找不到任何解释,所以我希望你能帮助我。

我只是在TypeScript语言规范中find了一些东西,这相当简单。 我非常接近。

语法如下:

 public myCallback: (name: type) => returntype; 

在我的例子中,这将是

 class CallbackTest { public myCallback: () => void; public doWork(): void { //doing some work... this.myCallback(); //calling callback } } 

为了更进一步,你可以声明一个types指针指向一个函数签名,如:

 interface myCallbackType { (myArgument: string): void } 

并像这样使用它:

 public myCallback : myCallbackType; 

你可以声明一个新的types:

 declare type MyHandler = (myArgument: string) => void; var handler: MyHandler; 

更新。

declare关键字不是必需的。 它应该在.d.ts文件或类似的情况下使用。

这里是一个例子 – 不接受任何参数,不返回任何东西。

 class CallbackTest { public myCallback: {(): void;}; public doWork(): void { //doing some work... this.myCallback(); //calling callback } } var test = new CallbackTest(); test.myCallback = () => alert("done"); test.doWork(); 

如果你想接受一个参数,你可以添加:

 public myCallback: {(msg: string): void;}; 

如果你想返回一个值,你可以添加:

 public myCallback: {(msg: string): number;}; 

如果你想要一个通用函数,你可以使用下面的代码。 虽然似乎没有任何记载。

 class CallbackTest { myCallback: Function; } 

尝试将callback添加到事件侦听器时遇到了同样的错误。 奇怪的是,设置callbacktypes为EventListener解决了它。 它看起来比定义整个函数签名作为一个types更优雅,但我不知道这是否是正确的方式来做到这一点。

 class driving { // the answer from this post - this works // private callback: () => void; // this also works! private callback:EventListener; constructor(){ this.callback = () => this.startJump(); window.addEventListener("keydown", this.callback); } startJump():void { console.log("jump!"); window.removeEventListener("keydown", this.callback); } }