Example here.
为什么在我遍历数字为1的所有属性并因此没有长度方法的情况下,流动不引发错误?
const myBeer: {name: string, size: number} = {
name: 'Rothaus',
size: 1
}
myBeer.size.length // Throws as expected
for (let key in myBeer) {
const value = myBeer[key];
value.length; // Why doesn't this throw?
}
最佳答案
在循环中动态访问对象的字段时,值可以是任何值。即使myBeer
的类型为{name: string, size: number}
,它也可以具有其他任何类型的字段,因此Flow甚至无法将类型推断为string | number
。
不论好坏,Flow都会将所有这些字段的类型推断为any
。我会选择?any
,但我们在那里。
即使您没有使用Flow,这也是一个很好的例子,说明了为什么不应该迭代混合类型的对象映射。这种类型感觉像是记录,而不是集合。因此,将其视为记录,然后直接访问您需要的字段。
关于javascript - 在for..in循环中,为什么访问可能无效的属性时Flow不会抛出异常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44829720/