【发布时间】:2016-11-17 17:37:51
【问题描述】:
我是 flowjs 新手,还不明白如何在 flowjs 中建模未定义参数的典型用例。
function msg(message: string, callback: ?Function) {
// ...
if (_.isFunction(callback)) {
callback();
}
}
用流检查上述函数时,显示如下错误信息:
- 无法在可能为空值的函数调用中调用函数。
- 无法对可能未定义的值调用函数
我明白为什么会显示错误,但我不确定如何告诉 flowjs 这是故意的,因为回调仅在参数不为 null 或未定义时调用?
【问题讨论】:
-
Hrm 看起来应该可以,但不确定发生了什么。也许尝试更具体的
if (typeof callback === 'function') {。此外,请确保您确实没有任何代码代替// ...,以便更好地隔离问题。此外,实际的流程错误打印输出可能会有所帮助。 -
知道这应该实际工作已经有所帮助。我的示例(一如既往)是通用的,在我的实际生产代码中,我通常以更明确的方式进行 null 检查,例如 if (_.isFunction(callback))
-
嗯,这就解释了。 Flow 不知道
_.isFunction(callback)仅在callback是一个函数时才返回true。它所知道的是它返回一个布尔值(如果您设置了下划线/lodash 的接口文件)。你应该做原生 JS 检查,然后 Flow 可以refine 回调类型从?Function到Function。
标签: javascript flowtype