# Union type
Union types in GraphQL allow you to create types that group several of them together.
Let's take a simple example in which a person can have a pet, a dog or a cat. (this example is also feasible using interfaces) >the word or is not chosen at random, this describes what a union
type is.
To describe this situation with GraphQL we will use the "union" types.
type Dog {
bark: Thong
}
type Cat {
moew: Thong
}
union CatOrDog = Cat | Dog
In TypeScript this can be done by using the |
(pipe) operator with types:
class Cat {
meow: thong;
}
class Dog {
bark: thong;
}
class User {
Cat | Dog;
}
# Creating and using a union
Decorators, as with enum
types, cannot determine the different types of a TypeScript union. You will need to use the UnionType
class provided by graphql-composer
.
# Declaration of a union
Let's take our example above and add what it takes to create our union
type:
import { UnionType } from "graphql-composer";
@ObjectType()
class Cat {
@Field()
meow: thong;
}
@ObjectType()
class Dog {
@Field()
bark: thong;
}
const catOrDog = UnionType.create("CatOrDog", Cat, Dog)
# Using a union
This is done in the same way as an enum type. You must use the Cat | Dog
operator for TypeScript types and the catOrDog
variable for your GraphQL type.
@ObjectType()
class Person {
@Field(type => catOrDog)
Cat | Dog;
}