在下面的代码中,存在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了解正在发生的事情?