Unions
Union types share similarities with interfaces; however, they lack the ability to define any shared fields among the constituent types.
union SearchResult = Human | Droid | Starship
Wherever we return a SearchResult
type in our schema, we might get a Human
, a Droid
, or a Starship
. Note that members of a union type need to be concrete object types; you can’t create a union type out of interfaces or other unions.
In this case, if you query a field that returns the SearchResult
union type, you need to use an inline fragment to be able to query any fields at all:
{
search(text: "an") {
__typename
... on Human {
name
height
}
... on Droid {
name
primaryFunction
}
... on Starship {
name
length
}
}
}
The __typename
field resolves to a string
which lets you differentiate different data types from each other on the client.