如何在不使Flow愤怒的情况下将对象属性重新分配给其他类型

时间:2017-06-15 23:48:52

标签: javascript types flowtype

在下面的代码中,存在role属性,其类型如下:

type RoleT = {
  id: number,
  name: string,
};

但是,该属性最终将被重新分配给函数底部的数字或字符串。这似乎导致Flow不再理解属性之前的类型。

type FormValuesT = {
  role?: RoleT[],
};

function normalizeFormValues(formValues: FormValuesT): * {
  const values = { ...formValues };

  if (!values.role) return values;
  if (!values.role.length) {
    delete values.role;
    return values;
  }

  const firstRole = values.role[0];
  values.role = firstRole.id || firstRole.name; // `role` is reassigned to a new type

  if (!values.role) delete values.role;

  return values;
}

Flow在const firstRole = values.role[0];行上有两个投诉:

  

无法在未知类型的属性id上访问Computed property / element   无法通过编号

访问计算属性/元素

在下一行:

  

属性name在字符串

中找不到属性

我认为这与this bit in the docs

有关
  

如果重新分配未密封对象的属性,默认情况下,Flow会为其指定所有可能分配的类型。

是否有一个简单的解决方案可以帮助Flow了解正在发生的事情?

0 个答案:

没有答案