[英]How should I declare the return type of a function that returns a $q promise with no data?
[英]Return type of a function that returns a chained promise
我有一個返回鏈式諾言的類,第一個諾言的類型為angular.IPromise<Foo>
,第二個諾言的類型為angular.IPromise<Bar>
。
為什么返回doSomething
angular.IPromise<Bar>
的返回類型?
我本以為返回類型將是angular.IPromise<Foo>
因為那是該函數返回的第一件事。 我知道then()
返回一個promise並將其返回的內容包裝到那個響應中,但這仍然讓我感到困惑。
import { Something } from '../somewhere';
import { Bar } from '../somewhereelse';
class Test {
doSomething(): angular.IPromise<Bar> {
return Something.getFoo() // getFoo() return type angular.IPromise<Foo>
.then(() => {
let x: Bar = {};
return x;
});
}
}
任何幫助,將不勝感激。 如果需要,我很樂意提供更多代碼。
第一件事是:您不返回Something.getFoo()
。 您返回Something.getFoo().then(...)
。 即使使用諾言來執行異步任務,也會立即返回它們。
then()
返回一個angular.IPromise
返回的承諾不是Something.getFoo()
那個,而是Something.getFoo().then(...)
返回的Something.getFoo().then(...)
並且提供給then()
的回調返回一個Bar
對象: promise.ten(foo=>return new Bar())
您的語句實際上返回了Promise<Bar>
對象。
如@TsatsuyukiIshi所述,這是angular.IPromise.then
的類型定義:
then<X>(successCallback: (promiseValue: T) => IPromise<X>|X, ...): IPromise<X>
此方法是通用的,其返回類型( X
)取決於作為參數提供的類型( (promiseValue: T) => IPromise<X>|X
)。
如果用Bar
替換X
,這很明顯:
then(successCallback: (promiseValue: T) => IPromise<Bar>|Bar, ...): IPromise<Bar>
如果代碼可以編譯,它將返回angular.IPromise<Bar>
。
接口可以映射到任意數量的類,並且可以使用前綴I
的名稱輕松標識它們。
具體類型將是Promise實現的詳細信息,但是只要它返回有關解析的Bar
,它就可以滿足IPromise<Bar>
。
編輯:TypeScript通過then<TResult>(successCallback: (promiseValue: T) => IPromise<TResult>|TResult, ...): IPromise<TResult>
的模板參數確定它。 這將靜態確定回調的返回類型。 資源
如果需要從結果中返回不同類型,則可以使用any
類型。 打字稿不是100%強類型語言。 類型可以在運行時更改。 實際上,解析器中的參數只是被忽略,回調函數按預期返回了該類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.