我不明白我目前得到的流量错误。我有一个Javascript对象的对象(dataObject
),我想将其转换为一个对象数组,所以我使用Object.values(dataObject)
这样做。然后,我使用以下内容遍历数组中的每个对象:
const dataObjectArray = Object.values(dataObject);
return dataObjectArray((data: DataObject) => {
const { typeA, typeB } = data;
return {
TYPE_A: typeA,
TYPE_B: typeB,
};
});
但是我收到以下flowtype错误:
我不确定如何匹配这些类型。目前我的DataObject流类型是
type DataObject = {
typeA: string,
typeB: string,
};
任何帮助将不胜感激。谢谢!
答案 0 :(得分:5)
Object.values
函数的类型定义无法知道传递给它的参数是一个值,它们的值都是相同的类型。您可以轻松地执行Object.values({foo: 4, bar: "str"})
。 The type definition is
(any) => Array<mixed>
表示您对.map
类型的值进行Array<mixed>
。
这意味着如果您想将其用作对象,则您的方法将无效。假设您的“对象对象”被输入为
type DataObjects = {
[string]: DataObject,
}
你可能会做得更好
function values(objs: DataObjects): Array<DataObject> {
Object.keys(objs).map(key => objs[key]);
}
答案 1 :(得分:1)
如果您更喜欢使用Object.values()(可能更有效)并具有正确的键入权限,则可以使用如下帮助函数:
function objectToValues<A, B>(obj:{[key: A]: B} ): Array<B> {
return ((Object.values(obj): any): Array<B>)
}