Javascript 为什么空对象对流类型中的非精确类型批注有效?
我的意思是像代码一样Javascript 为什么空对象对流类型中的非精确类型批注有效?,javascript,flowtype,Javascript,Flowtype,我的意思是像代码一样 const someObj: { id: number } = {}; const num: number = someObj.id; console.log(num); num这里没有定义,肯定不是数字 可以在此处检查代码段 这是一个用于未密封对象的示例: 未密封的对象允许随时写入新属性。Flow确保读操作与写操作兼容,但不确保写操作发生在读操作之前(按照执行顺序) 这意味着从不检查从未密封对象中读取且没有匹配写入的内容。这是一种不安全的流量行为,将来可能会得到改进 因
const someObj: { id: number } = {};
const num: number = someObj.id;
console.log(num);
num
这里没有定义,肯定不是数字
可以在此处检查代码段
这是一个用于未密封对象的示例:
未密封的对象允许随时写入新属性。Flow确保读操作与写操作兼容,但不确保写操作发生在读操作之前(按照执行顺序)
这意味着从不检查从未密封对象中读取且没有匹配写入的内容。这是一种不安全的流量行为,将来可能会得到改进
因此,正常情况下,flow可以检查
id
是否写为数字,但不能检查id
是否实际写入了someObj
添加了一个问题,也有一些讨论-这个问题是关于不精确类型的。。这与密封/未密封无关,因为类型是显式指定的,而不是inferred@AlekseyL. 我只是说流是如何工作的(默认情况下对象是不精确的),以及为什么这个特定的示例对流是有效的。如果你看到一个更好的答案,那就发吧;)若要解封对象,someObj.foo='foo'代码>将被允许。但密封/未密封与问题的关系并非如此?看起来像是一个带有空对象文本的bug,谢谢,这是有意义的(仍然与奇怪的行为有关)