我正在向我的旁边项目添加flowtype,并且遇到以下代码的混乱错误。
这可以按预期工作(通过抛出错误):
/* @flow */
function test(
events: {
[event: number]: {
}
}
): void {
events['hi'];
}
它会抛出以下错误:
8: events['hi'];
^ property `hi` is a string. This type is incompatible with
4: [event: number]: {
^ number
然而,这不起作用:
/* @flow */
function test(
events: {
[event: number]: {
}
}
): void {
for (const event: number in events) {
}
}
它出现以下错误:
for (const event: number in events) {
^ string. This type is incompatible with
for (const event: number in events) {
^ number
我想知道为什么会这样? According to the official documentation,Flow非常智能,可以在将Object用作地图时推断出Object类型的精确值。
是因为for循环的输入认为该对象可能包含其他字符串键控项吗?如何在保持显式类型安全的同时迭代这个?
答案 0 :(得分:0)
这与Flow无关,真的。 Javascript中的对象只能包含字符串和符号属性。使用方括号访问属性时,其他所有内容都会隐式转换为字符串。当您使用for in
或Object.keys
时,您将始终获得字符串。
答案 1 :(得分:-1)
我在搜索答案时遇到this thread,这可能表示目前只有for-in循环处理类型的错误。