枚举Flowtype'd对象的数字键

时间:2016-12-15 08:21:29

标签: javascript flowtype

我正在向我的旁边项目添加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循环的输入认为该对象可能包含其他字符串键控项吗?如何在保持显式类型安全的同时迭代这个?

2 个答案:

答案 0 :(得分:0)

这与Flow无关,真的。 Javascript中的对象只能包含字符串和符号属性。使用方括号访问属性时,其他所有内容都会隐式转换为字符串。当您使用for inObject.keys时,您将始终获得字符串。

答案 1 :(得分:-1)

我在搜索答案时遇到this thread,这可能表示目前只有for-in循环处理类型的错误。