反应道具的流动类型为两个阵列中的任何一个

时间:2017-11-13 09:50:48

标签: reactjs flowtype

type PropTypes = {
  myProp: Array<{a: string}> | Array<{a: number}>
}

如果我使用PropTypes创建一个compoennt,如上所示,我总是会收到以下错误:

myProp: *Array<{a: string}>* | Array<{a: number}>,
<<< object type. This type is incompatible with
myProp: Array<{a: string}> | *Array<{a: number}>*,

使用Array |后,这看起来很奇怪数组构造通常适用于简单的函数:

function foo(x: Array<First> | Array<Second>): string {
  return String(x[0]['a']);
}
No errors!

修改 MichaelDeBoey的回答指出了我正确的方向,并且当我们试图将道具映射到任何东西时,问题就出现了:

type PropTypes = {
  myProp: Array<{a: string}> | Array<{a: number}>
}

class TestComponent extends Component<PropTypes> {
  render () {
    this.props.myProp.map(prop => prop)
    return 'whatever'
  }
}

2 个答案:

答案 0 :(得分:0)

您使用的是flow的哪个版本?
通过v0.59.0 flow.org/try尝试使用此功能。

也许您可以尝试使用以下内容(在flow.org/try上观看):

type PropTypes = {
  myProp: Array<{a: string} | {a: number}>,
}

或者可能更清楚一点(关注flow.org/try):

type AString = {a: string};
type ANumber = {a: number};
type PropTypes = {
  myProp: Array<AString | ANumber>,
};

答案 1 :(得分:0)

我最终使用了一种解决方法。而不是使用 map 我使用迭代(var i = 0 ...): flow.org/try