Javascript 如何将对象属性重新指定给其他类型而不使流生气

Javascript 如何将对象属性重新指定给其他类型而不使流生气,javascript,types,flowtype,Javascript,Types,Flowtype,在下面的代码中,存在具有以下类型的role属性: type RoleT = { id: number, name: string, }; 但是,该属性最终将被重新分配给函数底部的数字或字符串。这似乎会导致流不再理解分配之前的属性类型 type FormValuesT = { role?: RoleT[], }; function normalizeFormValues(formValues: FormValuesT): * { const values = { ...form

在下面的代码中,存在具有以下类型的
role
属性:

type RoleT = {
  id: number,
  name: string,
};
但是,该属性最终将被重新分配给函数底部的数字或字符串。这似乎会导致流不再理解分配之前的属性类型

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
访问计算属性/元素 无法访问数字上的计算属性/元素

下一行:

属性
name
在字符串中找不到属性

我认为这与:

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

有没有一个简单的解决方案来帮助Flow了解发生了什么