簡體   English   中英

返回鏈式諾言的函數的返回類型

[英]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>的模板參數確定它。 這將靜態確定回調的返回類型。 資源

另請參見: TypeScript中的“聲明類”和“接口”之間有什么區別

如果需要從結果中返回不同類型,則可以使用any類型。 打字稿不是100%強類型語言。 類型可以在運行時更改。 實際上,解析器中的參數只是被忽略,回調函數按預期返回了該類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM