Schema 和类型

在本页,你将学到关于 GraphQL 类型系统中所有你需要了解的知识,以及类型系统如何描述可以查询的数据。因为 GraphQL 可以运行在任何后端框架或者编程语言之上,我们将摒除实现上的细节而仅仅专注于其概念。

联合类型(Union Types)

联合类型和接口十分相似,但是它并不指定类型之间的任何共同字段。

  1. union SearchResult = Human | Droid | Starship

在我们的schema中,任何返回一个 SearchResult 类型的地方,都可能得到一个 HumanDroid 或者 Starship。注意,联合类型的成员需要是具体对象类型;你不能使用接口或者其他联合类型来创造一个联合类型。

这时候,如果你需要查询一个返回 SearchResult 联合类型的字段,那么你得使用条件片段才能查询任意字段。

  1. # { "graphiql": true}
  2. {
  3. search(text: "an") {
  4. ... on Human {
  5. name
  6. height
  7. }
  8. ... on Droid {
  9. name
  10. primaryFunction
  11. }
  12. ... on Starship {
  13. name
  14. length
  15. }
  16. }
  17. }