2015-05-19 56 views
1

我有一個使用AngularJS的項目,並且想要在$http服務之上創建一個包裝。我希望我的請求承諾有abort()方法。TypeScript:替換現有類型

如果我寫

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,它通過添加一個abort()方法擴展了ng.IPromise。如何讓TypeScript將promise視爲my.IRequestPromise而不是ng.IPromise

回答

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> { 
+0

現在它拋出'type'IRequestPromise'不是通用的'。好像我不明白TypeScript的一些重要... – Girafa

+0

您需要返回'unction request(params:ng.IRequestConfig):my.IRequestPromise {'您的界面def看起來像什麼'interface IRequestPromise extends ng .IPromise <{}>'? – PSL

+0

我的類型是'IRequestPromise'。我需要將它傳遞給自己嗎? 'my.IRequestPromise '? – Girafa