介绍
GraphQL 是一种用于 API 的查询语言,它是由 Facebook 开发的。GraphQL 通过定义类型和它们之间的关系来描述 API 的数据模型。同样,GraphQL 中的联合类型也是一种类型,它可以用于定义一个类型可以表示多种不同的类型。
在 GraphQL 中,联合类型是一种特殊的类型,它允许一个字段可以返回多个不同类型的值。联合类型通常用于表示一个字段具有多个可能的类型。例如,有一个字段 animal
,它可以返回 Cat
类型、Dog
类型或者 Bird
类型。
下面介绍 GraphQL 中如何定义联合类型,并使用示例展示其用法。
定义联合类型
在 GraphQL 中,定义联合类型需要通过 union
关键字。例如,定义一个 Animal
的联合类型:
union Animal = Cat | Dog | Bird
在上面的例子中,联合类型 Animal
包含三个的类型,分别为 Cat
、Dog
和 Bird
。
联合类型的命名规则与其他类型相同,命名必须以大写字母开头。
在 GraphQL Schema 中使用联合类型
在 GraphQL 的 Schema 中,定义了一个类型之后,需要在具体的 Query 和 Mutation 中使用。
在使用联合类型中,通常需要在 Query 或 Mutation 中定义一个返回类型为联合类型的字段。例如,我们定义了一个 Query
,用于获取动物信息:
type Query { animal: Animal }
在上面的例子中,animal
字段的返回类型为联合类型 Animal
。这个字段可以返回类型为 Cat
、Dog
或 Bird
的数据。
类似地,也可以定义一个 Mutation
来修改动物信息,例如:
type Mutation { updateAnimal(animal: AnimalInput!): Animal }
在上面的例子中,updateAnimal
可以接收一个 AnimalInput
,并返回类型为 Animal
的对象。
使用联合类型
在 GraphQL 查询数据时,可以根据联合类型定义的字段返回类型选择需要的数据。在下面的例子中,我们可以查询 animal
字段,然后根据返回类型的不同,调用不同类型的属性:
-- -------------------- ---- ------- - ------ - ---------- --- -- --- - ---- - --- -- --- - ---- - --- -- ---- - ----- - - -
在上面的例子中,使用了 GraphQL 中的 __typename
关键字,获取当前返回类型的名字。然后用 ... on [typename]
指令来判断具体的类型。例如,如果返回的是 Cat
类型,就调用 meow
函数。
总结
联合类型是 GraphQL 中一种重要的类型,它可以用于定义一个字段可以返回多个不同类型的值。在定义时需要使用 union
,在 Schema 中使用时需要定义具体 Query 或 Mutations,然后可以使用查询指令来获取需要的数据。
在使用联合类型时,需要注意类型的区分,通过 __typename
和 ... on
等指令来选择需要的数据。掌握联合类型的用法,可以方便的返回所有类型的数据,提高开发工作效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646c93d0968c7c53b0b894d2