javascript - 无法对迭代器上可能未定义的值调用函数

标签 javascript flowtype

Flow 确信以下内容是安全的:

const a: ?any = {};
if (a!=null) {
    console.log(a.toString());
}

...但会引发以下错误:

const m: Map<string, string> = new Map();
const iter = m.keys();
const iternext = iter.next();
if (iternext!=null) {
    const ignore = iternext.value(); // Flow doesn't like this
}

错误是:

call of method `value`. Function cannot be called on possibly undefined value

这是为什么呢? 使用最新的 0.57.3 进行测试。

最佳答案

我相信错误消息是说 iternext.value可能是undefined .

iter.next()实际上永远不会回来undefinednull ,所以if测试是不必要的。当迭代器耗尽时,它将返回 {value: <return value>, done: true} 。大多数生成器没有返回值,所以它将是 {value: undefined, done: true} ,因此 Flow 说“无法对可能未定义的值调用函数”:

const m = new Map([['foo', 'bar']]);
const iter = m.keys();
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());

调用 iternext.value()肯定是错误的,因为你有一个字符串映射。仅当您有函数映射(并且迭代器未耗尽)时才可以调用它。

您可能想看看 iterator protocol再次。

关于javascript - 无法对迭代器上可能未定义的值调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46840017/

相关文章:

javascript - 2种jquery的写法,有什么区别?

javascript - flowtype 可空对象不可变属性细化

javascript -/* @flow strict */在所有源文件上

javascript - 使用 Flow 获取 React Native 错误

javascript - 为什么在这种情况下流会显示错误?

javascript - REACT onChange 绑定(bind)此错误

javascript - 在我的 Python CGI 脚本中,如何将通过用户在表单中输入的数据的 POST 请求上传的文件保存到磁盘?

javascript - 在 Rollup 中,创建除 Flow 之外不进行 babel 转译的 ESM 模块

javascript - Facebook Connect/Graph - Internet Explorer 中的问题与 fb :login dialog (not closing)

javascript - 尝试检测浏览器关闭事件