定义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
? 现在,公共领域myCallback
是any
types如上所示。 我怎样才能定义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); } }