中继突变生成的协变流类型与查询中的非协变

Covariant Flow types generated by Relay mutation vs non-covariant in Queries

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

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 的查询片段时,我收到错误:

object type. Covariant property platform incompatible with invariant use in

尝试强制转换您的变量:

const a = { ... } : MyForceCast

有时,Flow 在混合使用它们时无法选择正确的类型。