2016-09-06 32 views
1

我是flowjs的新手,但尚未理解未定義參數的典型用例應如何在flowjs中建模。如何指定flowjs中可以未定義的參數

function msg(message: string, callback: ?Function) { 
    // ... 
    if (_.isFunction(callback)) { 
     callback(); 
    } 
} 

當檢查具有流量上述功能,示出了以下錯誤消息:

  • 功能不能在可能空值的函數調用被調用。
  • 功能不能被稱爲上可能未定義值

我不明白,爲什麼顯示的錯誤,但我不知道如何告訴flowjs,這是故意的,因爲回調時纔會激活,當參數不null或undefined?

+0

看起來像這樣應該工作,不知道發生了什麼。也許嘗試更具體的'if(typeof callback ==='function'){'。另外,爲了更好地隔離問題,確保你沒有代替'// ...'的代碼。另外,實際的流量錯誤打印輸出可能會有所幫助。 – Nikita

+0

知道這應該實際工作已經有所幫助。我的例子是(一如既往)泛型和在我的實際生產代碼中,我通常以更明確的方式做空檢查,如if(_.isFunction(callback)) – doberkofler

+0

那麼,這解釋了它。 Flow不知道'_.isFunction(callback)'只有在'callback'是一個函數時才返回'true'。它只知道它返回一個布爾值(如果你有設置下劃線/ lodash的接口文件)。您應該執行原生JS檢查,然後Flow可以*修改從'Function'到'Function'的回調類型。 – Nikita

回答

1

只有當callback是一個函數時,Flow纔會知道_.isFunction(callback)返回true。它只知道它返回一個布爾值(如果你有設置下劃線/ lodash的接口文件)。您應該執行原生JS檢查,然後Flow可以將callback的類型從?Function改進爲Function。像這樣:if (typeof callback === 'function') { callback() }

更簡單的類型檢查應該也可以工作:if (callback) { callback() }因爲Flow知道如果callback不是錯誤的,它必須是一個函數。

更多在https://flowtype.org/docs/dynamic-type-tests.html