如何将接口应用于打字稿中的匿名回调函数

时间:2017-06-16 04:55:00

标签: javascript typescript typescript-typings

我有一个看起来像这样的界面

interface CallBackHandler{
 (err: Error, response: {statusCode: number, body: object}):void
}

我希望将该接口应用于此

的回调
    request({
    url: url,
    method: "GET",
    withCredentials: false,
    json: true,
    headers: headers
  }, (err, response) => {
    this.handleResponse(err, response, resolve, reject);
  });

但我得到一个错误,如果我添加界面时返回类型不是无效的话,函数必须返回一些东西

(err, response): CallBackHandler => {
    this.handleResponse(err, response, resolve, reject);
  }

应用此界面的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

如果request()已有类型签名:

function request(options, callback: CallBackHandler) {
   ...
}

然后您不需要做任何事情,因为您提供的回调将相应地进行类型检查。

如果该函数已经具有该类型签名,并且您想手动将回调转换为CallBackHandler,那么您需要将回调函数包装在括号中并进行转换表达式,如下:

request({
    ...etc
}, ((err, response) => {
    this.handleResponse(err, response, resolve, reject);
}) as CallBackHandler);

答案 1 :(得分:0)

您可以拥有类似

的内容
request({
  url: url,
  method: "GET",
  withCredentials: false,
  json: true,
  headers: headers
}, (err: Error, response: {statusCode: number, body: object}) => {
  this.handleResponse(err, response, resolve, reject);
});