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

标签 javascript flowtype

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

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

当使用flow检查上述函数时,显示以下错误消息:

  • 无法在可能为空值的函数调用上调用函数。
  • 无法对可能未定义的值调用函数

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

最佳答案

仅当 callback 是函数时,Flow 才知道 _.isFunction(callback) 返回 true。它只知道它返回一个 bool 值(如果您设置了下划线/lodash 的接口(interface)文件)。您应该进行原生 JS 检查,然后 Flow 可以将 callback 的类型从 ?Function 细化为 Function。像这样:if (typeofcallback === 'function') {callback() }

更简单的类型检查也应该有效:if (callback) {callback() },因为 Flow 知道如果 callback 不为 false,则它必须是功能。

查看更多信息 https://flowtype.org/docs/dynamic-type-tests.html

关于javascript - 如何在flowjs中指定一个可以未定义的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39341806/

相关文章:

javascript - 如何使用 jQuery 倒计时插件创建计时器 "count up"?

javascript - 如何在 React 中触发文件下载?

javascript - 没有 Flow 的 React Native?

javascript - 有什么方法可以告诉 Flow getElementById() 返回的 HTMLElement 不能为 null?

javascript - JavaScript 中的坐标与鼠标悬停时的图像

javascript - 无法在 'removeChild' : parameter 1 is not of type 'Node' 上执行 'Node'

javascript - 删除字符串的特定部分并在末尾添加另一个

javascript - 流字符串与字符串文字不兼容?

javascript - "Possibly undefined value",如何使 null 安全?

javascript - Flow、ReactJS 和 ES6 类的错误