我在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,如上所示。如何定义回调的方法签名?或者我可以将类型设置为某种回调类型?或者这些我都不能做?我必须使用任何(隐式/显式)吗?

我尝试了类似的东西,但它不起作用(编译时错误):

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

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


当前回答

下面是一个示例—不接受参数,不返回任何值。

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;
}   

下面是一个示例—不接受参数,不返回任何值。

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;};

这是angular组件和服务的可选回调函数示例

    maincomponent(){
        const param = "xyz";
       this.service.mainServie(param, (response)=>{
        if(response){console.log("true");}
        else{console.log("false");}
      })
    }

//Service Component
    mainService(param: string, callback?){
      if(string === "xyz"){
        //call restApi 
        callback(true);
      }
    else{
        callback(false);
      }
    }

你可以声明一个新类型:

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

var handler: MyHandler;

更新。

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

我刚刚在TypeScript语言规范中找到了一些东西,这是相当简单的。我已经很接近了。

语法如下:

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

在我的例子中,它是

class CallbackTest
{
    public myCallback: () => void;

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

作为类型别名:

type MyCallback = (name: type) => returntype;