Gatsby-如何创建具有交替嵌套类型的数据类型

时间:2019-09-01 16:13:01

标签: graphql gatsby

我需要为以下Yaml定义节点类型。 “条目”字段可以采用不同的形状:

- title: Exercise
  instructions: "Do stuff"
  entries: 
    - type: "fill"
      value: "Fill %s with %s "
      solutions: ["this", "something"]
    - type: "choice"
      values: [choice1, choice2, choice3]
      solution: 1

在gatsby-node.js中创建节点类型时,我希望能够使用联合来定义不同的嵌套类型,如下所示:

exports.sourceNodes = ({ actions }) => {
  actions.createTypes(`
    union Entry = ChoiceEntry | FillEntry
    type Exercise implements Node @dontInfer {
      id: ID!
      title: String!
      instructions: String!
      entries: [Entry]!
    }
    type ChoiceEntry {
      type: String!
      value: [String!]!
      solution: Int!
    }
    type FillEntry {
      type: String!
      value: String!
      solutions: [String!]!
    }
  `)
}

不幸的是,我无法按照我的期望进行查询:

query MyQuery {
  allExercise {
    nodes {
      id
      entries {
        ... on ChoiceEntry {
          type
        }
        ... on FillEntry {
          type
        }
      }
    }
  }
}

我收到错误:“ TypeError:无法读取未定义的属性'type'”。

我在做什么错?也许这不是正确的方法,不同类型的Entry应该是它们自己的节点,工会才能正常运行?但是,如果是这样,仍然可以解析输入的yaml吗?

0 个答案:

没有答案