流:对象类型与Array <mixed>不兼容

use*_*348 1 javascript flowtype flow-typed

我不明白我当前遇到的流程错误。我有一个Javascript对象object(dataObject),我想将其转换为对象数组,因此可以使用Object.values(dataObject)。然后,我使用以下方法遍历数组中的每个对象:

  const dataObjectArray = Object.values(dataObject);
  return dataObjectArray((data: DataObject) => {
    const { typeA, typeB } = data;
    return {
      TYPE_A: typeA,
      TYPE_B: typeB,
    };
  });
Run Code Online (Sandbox Code Playgroud)

但是我收到以下流类型错误:

流量误差

我不确定如何匹配类型。目前,我的DataObject流类型是

type DataObject = {
    typeA: string,
    typeB: string,
};
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。谢谢!

log*_*yth 5

Object.values函数的类型定义无法知道传递给它的参数是一个值都相同的对象。您可以轻松地做Object.values({foo: 4, bar: "str"})类型定义是

(any) => Array<mixed>
Run Code Online (Sandbox Code Playgroud)

表示您正在.map使用type的值Array<mixed>

这意味着,如果您要将其用作对象,则您的方法将不起作用。假设您的“对象的对象”键入为

type DataObjects = {
  [string]: DataObject,
}
Run Code Online (Sandbox Code Playgroud)

您可能会做得更好

function values(objs: DataObjects): Array<DataObject> {
  Object.keys(objs).map(key => objs[key]);
}
Run Code Online (Sandbox Code Playgroud)