如何为已展平的嵌套对象生成类型?

时间:2019-10-29 21:23:46

标签: javascript flowtype

我正在尝试使用带有这样的嵌套对象的类型:

type Numbers = {
  numberOfCategories: number,
  colors: {
    numberOfColors: number
  },
  cars: {
    numberOfCars: number
  }
}

并自动生成一个扁平化的类型,如下所示:

type FlattedNumbers = {
  numberOfCategories: number,
  numberOfColors: number
  numberOfCars: number
}

我认为这样可以解决问题,但是它没有按我预期的那样工作:

type Numbers = {
  numberOfCategories: number,
  colors: {
    numberOfColors: number
  },
  cars: {
    numberOfCars: number
  }
}

type ConvertToObjects =
    & (<K, V:Object> (K, V) => V)
    & (<K, V> (K, V) => { K: V })


type Flattened = { ...$Values<$ObjMapi<Numbers, ConvertToObjects>> };

let test = ({
      numberOfCategories: 2,
      numberOfColors: 5,
      numberOfCars: 10
}: Flattened)

我收到以下错误消息:

// 15: type Flattened = { ...$Values<$ObjMapi<Numbers, ConvertToObjects>> };
//                                   ^ number [1] is not an object.
// References:
// 2:   numberOfCategories: number,
//                          ^ [1]

我的目标是使等效的Flattened函数正常工作。

我从这里开始玩: flow playground

1 个答案:

答案 0 :(得分:0)

此问题似乎已在a recent commit中修复,自您发布此问题以来,该问题已在Flow v0.111.1中作为错误修复发布。您的游乐场链接在最新版本上未显示任何错误,但在使用v0.111.0时仍会显示。