2017-09-01 15 views
3

切換到流0.54.0下面的代碼片段後新建 「缺少註釋」 錯誤在flowjs 0.54.0

Error: scripts/runKarma.js:76 
       v---------------------------------------- 
76: return new Promise(function (resolve, reject) { 
77:   new karma.Server(KARMA_CONFIG, function (exitCode) { 
78:     if (exitCode === 0) { 
...: 
84: }); 
     -^ type parameter `R` of constructor call. Missing annotation 

在線路return new Promise(function (resolve, reject) {和我似乎無法弄清楚什麼是錯的?

+0

您以前使用過哪個版本的Flow? 0.52或0.53 –

+0

我剛從0.53.1升級到 – doberkofler

回答

7

它看起來像它想知道的是承諾包裹的價值的類型。在這種情況下,它看起來只是undefined,因爲成功案例並沒有給出任何價值。你可以註釋返回這個函數返回Promise<void>或類似的東西,使這個錯誤消失的函數。

雖然這發生在0.54而不是之前,但很奇怪。

+3

新問題實際上不是'返回新的Promise(function(resolve,reject){'line由flow報告,但在函數runKarmaTest()'定義中缺少註釋本身 – doberkofler

6

Promise<void>標註在runKarmaTest功能解決了這個問題:

function runKarmaTest(): Promise<void> { 
    const KARMA_CONFIG = {}; 
    return new Promise(function (resolve, reject) { 
     new karma.Server(KARMA_CONFIG, function (exitCode) { 
      if (exitCode === 0) { 
       resolve(); 
      } else { 
       reject(exitCode); 
      } 
     }).start(); 
    }); 
} 

我仍然不知道:

  • 爲什麼需要在0.54與此註釋不
  • 爲什麼之前流程Type Inference無法從解析中的缺失參數推導出來
+0

Flow需要你註釋模塊的邊界,在很多情況下,它可以推斷出它們,但它需要全局類型推斷,這對於大型代碼庫來說會非常緩慢,如果只需要做一次只能在一個模塊上鍵入推理我不確定爲什麼現在需要這個註解,但我猜測有一個修復的錯誤。 –