Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is a Union type in GraphQL?
A Union type in GraphQL lets a field return one of several different object types. It helps when a query can return different shapes of data.
Click to reveal answer
beginner
How do you define a Union type in GraphQL schema?
Use the union keyword followed by the union name and the possible types separated by |. For example: union SearchResult = Photo | Person
Click to reveal answer
intermediate
Can Union types include scalar types like String or Int?
No, Union types can only include object types, not scalar types like String or Int.
Click to reveal answer
intermediate
How do you query a field that returns a Union type?
You use inline fragments with ... on TypeName to specify fields for each possible type in the union.
Click to reveal answer
advanced
Why use Union types instead of Interfaces in GraphQL?
Union types are for when the types don’t share fields. Interfaces require shared fields. Use Union when types are different and unrelated.
Click to reveal answer
Which keyword defines a Union type in GraphQL?
Aenum
Binterface
Cunion
Dtype
✗ Incorrect
The union keyword is used to define a Union type in GraphQL.
Can a Union type include scalar types like Int or String?
ANo, only object types
BYes, always
COnly if wrapped in an object
DOnly in mutations
✗ Incorrect
Union types can only include object types, not scalar types.
How do you specify fields for each type in a Union when querying?
AUsing variables
BUsing fragments with fragment keyword only
CUsing aliases
DUsing inline fragments with ... on TypeName
✗ Incorrect
Inline fragments with ... on TypeName let you select fields for each type in a Union.
What is a key difference between Union types and Interfaces?
AUnion types do not require shared fields
BInterfaces can include scalar types
CUnion types require shared fields
DInterfaces cannot be queried
✗ Incorrect
Union types do not require shared fields, unlike Interfaces which do.
Which of these is a valid Union type definition?
Aunion Result = String | Int
Bunion Result = Photo | Person
Cunion Result = interface Person
Dunion Result = enum Status
✗ Incorrect
Union types can only include object types like Photo and Person, not scalars or enums.
Explain what a Union type is in GraphQL and how it differs from an Interface.
Think about when you want to return different shapes of data without common fields.
You got /4 concepts.
Describe how to query a field that returns a Union type and why inline fragments are needed.
Imagine you get different objects and want to ask for their specific details.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of using union types in GraphQL?
easy
A. To group multiple object types into one field that can return different types
B. To define a list of scalar values
C. To create a new scalar type
D. To enforce a single object type for a field
Solution
Step 1: Understand union type purpose
Union types allow a field to return one of several object types, grouping them logically.
Step 2: Compare with other options
Defining a list of scalar values or creating a new scalar type describes scalars, not unions. Enforcing a single object type for a field contradicts the union concept.
Final Answer:
To group multiple object types into one field that can return different types -> Option A
Quick Check:
Union types = group multiple object types [OK]
Hint: Unions group different object types under one field [OK]
Common Mistakes:
Confusing union with scalar types
Thinking unions enforce a single type
Mixing unions with interfaces
2. Which of the following is the correct syntax to define a union type named SearchResult that includes User and Post types?
easy
A. type SearchResult = User & Post
B. union SearchResult = User | Post
C. interface SearchResult = User | Post
D. union SearchResult { User, Post }
Solution
Step 1: Recall union syntax
Unions use the syntax: union Name = Type1 | Type2 with pipe separators.
Step 2: Check each option
union SearchResult = User | Post matches correct syntax. type SearchResult = User & Post uses & which is for intersections, not unions. interface SearchResult = User | Post wrongly uses interface keyword. union SearchResult { User, Post } uses braces which is invalid for unions.
Final Answer:
union SearchResult = User | Post -> Option B
Quick Check:
Union syntax uses '=' and '|' [OK]
Hint: Use '=' and '|' to define unions, no braces [OK]
Common Mistakes:
Using '&' instead of '|'
Using braces {} instead of '='
Confusing union with interface syntax
3. Given the union type SearchResult = User | Post and this query:
{ search { ... on User { name } ... on Post { title } } }
What fields will be returned if the search result contains one User with name "Alice" and one Post with title "GraphQL Guide"?
medium
A. [{"name": "Alice"}]
B. [{"name": "Alice", "title": "GraphQL Guide"}]
C. [{"title": "GraphQL Guide"}]
D. [{"name": "Alice"}, {"title": "GraphQL Guide"}]
Solution
Step 1: Understand inline fragments on union
The query uses inline fragments to select name from User and title from Post.
Step 2: Apply to data
Since the result has one User and one Post, the response includes both objects separately with their respective fields.
Final Answer:
[{"name": "Alice"}, {"title": "GraphQL Guide"}] -> Option D
Quick Check:
Inline fragments return fields per type separately [OK]
Hint: Inline fragments return separate objects per type [OK]
Common Mistakes:
Combining fields into one object
Returning only one type's fields
Ignoring inline fragment usage
4. Consider this union definition:
union SearchResult = User | Post
And this query:
{ search { ... on User { id name } ... on Post { id title } } }
Which of the following errors will occur if you try to query a field email inside Post inline fragment like this:
{ search { ... on User { id name } ... on Post { id title email } } }
medium
A. Error: Field 'email' must be queried on User type
B. No error, query runs successfully
C. Error: Field 'email' does not exist on type 'Post'
D. Error: Union types cannot have inline fragments
Solution
Step 1: Check Post type fields
If email is not defined on Post type, querying it causes an error.
Step 2: Understand inline fragment validation
Inline fragments must only query fields existing on the specified type. Querying unknown fields causes errors.
Final Answer:
Error: Field 'email' does not exist on type 'Post' -> Option C
Quick Check:
Querying unknown fields on type causes error [OK]
Hint: Check if field exists on type before querying [OK]
Common Mistakes:
Assuming all fields exist on all union types
Thinking unions disallow inline fragments
Querying fields on wrong types
5. You have a union type SearchResult = User | Post | Comment. You want to write a query that returns the name for User, title for Post, and content for Comment. Which query correctly fetches these fields?
hard
A. { search { ... on User { name } ... on Post { title } ... on Comment { content } } }
B. { search { name title content } }
C. { search { ... on User { name } ... on Post { title } content } }
D. { search { ... on User { name } ... on Post { title } ... on Comment { title } } }
Solution
Step 1: Use inline fragments for each union type
Each type in the union requires its own inline fragment to query its specific fields.
Step 2: Validate fields per type
{ search { ... on User { name } ... on Post { title } ... on Comment { content } } } queries name on User, title on Post, and content on Comment correctly. Other options either query fields directly without fragments or use wrong fields.
Final Answer:
{ search { ... on User { name } ... on Post { title } ... on Comment { content } } } -> Option A
Quick Check:
Use inline fragments per type to query union fields [OK]
Hint: Use one inline fragment per union type with correct fields [OK]