如何指定一个可以在flowjs中未定义的参数

How to specify a parameter that can be undefined in flowjs

我是 flowjs 的新手,尚不了解应如何在 flowjs 中对未定义参数的典型用例建模。

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

用flow检查上述函数时,出现如下错误信息:

我明白为什么会显示错误,但我不确定如何告诉 flowjs 这是故意的,因为回调仅在参数不为 null 或未定义时调用?

Flow 不知道 _.isFunction(callback) returns true 只有 callback 是一个函数。它所知道的是它 returns 是一个布尔值(如果您设置了 underscore/lodash 的接口文件)。您应该改用原生 JS 检查,然后 Flow 可以将 callback 的类型从 ?Function 细化为 Function。像这样:if (typeof callback === 'function') { callback() }.

更简单的类型检查也应该有效:if (callback) { callback() } 因为 Flow 知道如果 callback 不是假的,它必须是一个函数。

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

查看更多