由Relay变异生成的协变流类型与查询中的非协变性

时间:2017-10-06 19:10:50

标签: javascript reactjs flowtype relay

我遇到了编译器生成的某些类型的问题,特别是查询和最终导致相同类型的突变结果之间的问题。 一个有点像:

fragment Foo on MyType {
  createdAt
  hidden
  locked
}

query {
  foo(...) {
     id
     ...Foo
  }
}

这会产生协变属性:

export type Foo = {|
  +createdAt: any,
  +hidden: boolean,
  +locked: boolean
|};

在另一个地方我有:

mutation doSomething(...) {
  clientMutationId
  foo {
    createdAt
    hidden
    locked
  }
}

将生成类型:

export type DoSomething_foo = {
    createdAt: any
    hidden: boolean
    locked: boolean 
}

因此,当我尝试匹配变异的结果foo和调用commit的查询片段时,我收到错误:

  

对象类型。协变属性platform与不变量不兼容   用于

1 个答案:

答案 0 :(得分:1)

尝试强制转换变量:

const a = { ... } : MyForceCast

有时,当您混合时,Flow无法选择正确的类型。