TypeScript:替换现有类型

时间:2015-05-19 14:42:09

标签: javascript angularjs typescript

我有一个使用AngularJS的项目,并希望在$http服务之上创建一个包装器。我希望我的请求承诺有abort()方法。

如果我写

function request(params:ng.IRequestConfig):my.IRequestPromise {
  var promise = $http(params).then(onSuccess, onError);
  promise.abort = function () { // => here it fails with error "Property 'abort' does not exist on type 'IPromise<{}>'"
    ...
  }
  return promise;
}

它在abort定义的行上失败了。

我编写了一个IRequestPromise接口,通过添加ng.IPromise方法扩展了abort()。如何让TypeScript将promise视为my.IRequestPromise而不是ng.IPromise

1 个答案:

答案 0 :(得分:1)

您可以将返回的承诺类型(ng.IPromise)转换为您的类型(my.IRequestPromiseng.IPromise扩展而来):

var promise = <my.IRequestPromise<yourreturntype>>$http(params).then(onSuccess, onError);

假设您的扩展程序是这样的:

export interface IRequestPromise<T> extends ng.IPromise<T> {
    ...
}

还要确保您的函数返回类型也是属性类型,即

function request(params:ng.IRequestConfig):my.IRequestPromise<anyOrSpecificTypeResolvedByPromise> {