簡體   English   中英

打字稿:為承諾中的解析參數指定正確的返回類型

[英]Typescript: Specifying proper return type for resolve parameters in promises

昨天,我決定使用Typescript,並嘗試將一些基本的JavaScript Promise示例移植到Typescript Promise。 但是,在移植樣本的過程中,我遇到了一個仍然無法解決的問題。 試圖谷歌也沒有用。

場景:我確實有一個返回Promise的函數,該Promise在執行時解析為number 我還想在此樣本上測試一些then場景。

請在下面找到代碼示例:

function test_promise(): Promise<number>{
    return new Promise((resolve, reject) :number => {
        let result:number = 10;
        resolve(result);
    }).then(result => {            // first then
        console.log("Result: " + (typeof result)); // Result: number
        return result * 2; //
    }).then(result => {            // second then
        return result * 2;
    }).then(result => {            // third then
        return result * 2;
    });
}

我還添加了兩個屏幕截圖,以提高清晰度。

屏幕截圖1:

在此處輸入圖片說明

屏幕截圖2

在此處輸入圖片說明

我目前尚不清楚幾件事:

  1. 在屏幕快照1中,提示項沒有說typeof結果是number ,而是在console.log打印它時說它是number 有什么不同?
  2. 如果它在控制台中顯示的是number ,那么為什么它不允許我對此執行乘法運算。

為了使此示例正常工作,我需要在此處進行哪些更改?

希望你們能對此有所了解。 謝謝。

問候,

解決方案是通過在new Promise之后直接添加<number>來顯式指定實例化的第一個Promise對象的值類型,如下所示:

    /* Add <number> after new Promise */
    return new Promise<number>((resolve, reject) => {
        let result:number = 10;
        resolve(result);
    }).then(result => {            // first then
        console.log("Result: " + (typeof result)); // Result: number
        return result * 2; //
    }).then(result => {            // second then
        return result * 2;
    }).then(result => {            // third then
        return result * 2;
    });

這樣做會通知Typescript第一個Promise值類型,從而可以推斷出鏈中后續Promise的值類型。

這將反過來解決您的問題。 有關Typescript中泛型的更多信息,請參見此處 希望有幫助!

檢查以下行:

return new Promise((resolve, reject) :number => {

: number表示函數(或意義不大的構造函數)正在返回數字。 這不是真的! new Promise顯然會返回Promise,而您不必指定它。

您想說的也許是Promise處理的類型。 您可以使用角括號來做到這一點:

return new Promise<number>((resolve, reject) => {

暫無
暫無

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

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