我有一个使用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
?
答案 0 :(得分:1)
您可以将返回的承诺类型(ng.IPromise
)转换为您的类型(my.IRequestPromise
从ng.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> {