如何在Typescript中定義Promise的返回值型別

weixin_34148456發表於2018-09-26

問題

如何在 Typescript 中定義 Promise 的返回值型別?

描述

如圖所示,可以看到 Promise 中,reslove() 方法傳入的是 number 型別。但是,Typescript 感知到的型別卻是 Promise<{}>。如何讓

1674837-ff3a2acb2b1d7734.png
Promise 無法感知reslove 的型別

解決辦法

方法一

通過 Promise 的建構函式,宣告返回值的泛型型別。

1674837-bfd677a71947b54a.png
通過Promise的建構函式宣告返回型別

方法二

修改 reslove的型別定義

1674837-bfba52b9f4e6d921.png
重新定義reslove函式的型別

原理

    /**
     * Creates a new Promise.
     * @param executor A callback used to initialize the promise. This callback is passed two arguments:
     * a resolve callback used resolve the promise with a value or the result of another promise,
     * and a reject callback used to reject the promise with a provided reason or error.
     */
    new <T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void): Promise<T>;

Promise的型別定義如上,我們可以看到 Promise 返回值的型別定義,可以由兩部分決定。第一個是構造時的泛型值,第二個是 reslove函式 value值得型別。

參考文章

相關文章