Flow 不喜欢这个有条件地访问一个对象的 属性 的代码,只有当它存在时

What does Flow not like about this code that conditionally accesses an object's property only if it exists

这是我的代码:

// @flow

var x = {a: 'foo'};
var key = Math.random() > 0.5 ? 'b' : 'a';
var value = x.hasOwnProperty(key) ? x[key] : 'default';
console.log(value);

所以只有当 key 确实是 x 的 属性 时才访问 x[key],否则使用默认值。但是 Flow 不喜欢这样,它说:

test-flow.js:5
  5: var value = x.hasOwnProperty(key) ? x[key] : 'default';
                                           ^^^ property `b`. Property not found in
  5: var value = x.hasOwnProperty(key) ? x[key] : 'default';
                                         ^ object literal

知道我做错了什么吗?

这看起来像是 Flow 中的错误。您可能想在他们的 github.

上打开一个问题

与此同时,向 key 添加显式类型可解决问题,原因如下:

var key: string = ...