关于Flow,我有一个看似简单的问题 .

给出以下对象:

const input: InputObject = {
  key1: {
    prop1: 'value1',
  },
  key2: {
    prop2: 'value2',
    prop3: false,
  },
};

const output: OutputObject = {
  prop1: 'value1',
  prop2: 'value2',
  prop3: false,
};

如何根据 InputObject 获取 OutputObject 的类型?

type OutputObject = ??magic?? InputObject ??magic??;

上下文

我想键入一个React HOC组件,它将根据配置对象注入一些属性,如:

type Props = {
  prop1: string,
  prop2: string,
  prop3: boolean,
};

class Component extends React.Component<Props> { /* */ }

Hoc({
  key1: () => ({
    prop1: 'value1',
  }),
  key2: () => ({
    prop2: 'value2',
    prop3: false,
  }),
})(Component);

我已经知道如何正确键入HOC以使其类型安全以及如何从传递给HOC的配置对象中获取 InputObject 但是我仍然坚持如何 InputObject 类型为 OutputObject 类型,以便 <Component /> 将是很高兴,因为它将从HOC获得所有必需的属性:)

更重要的是!我希望以下是一个类型错误:

const HocComponent = Hoc({
  key1: () => ({
    prop1: 'value1',
  }),
  key2: () => ({
    prop2: 'value2',
  }),
})(Component);

<HocComponent />              // Error! prop3 is required
<HocComponent prop3={true} /> // Happy again

谢谢!