Bird
Raised Fist0
GraphQLquery~5 mins

Abstract type resolution in GraphQL - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

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 abstract type resolution in GraphQL?
It is the process of determining the concrete object type that implements an abstract type like an interface or union during query execution.
Click to reveal answer
beginner
Name two GraphQL abstract types that require resolution.
Interfaces and unions are the two abstract types that need resolution to find the actual object type at runtime.
Click to reveal answer
intermediate
How does GraphQL resolve an abstract type?
GraphQL calls a resolveType function or uses a default mechanism to identify the concrete type of the object returned.
Click to reveal answer
intermediate
Why is abstract type resolution important in GraphQL?
It allows clients to query fields specific to the concrete type while using a common interface or union, enabling flexible and type-safe queries.
Click to reveal answer
advanced
What happens if GraphQL cannot resolve the concrete type of an abstract type?
The query will fail with an error because GraphQL needs to know the exact type to return the correct fields.
Click to reveal answer
Which GraphQL types require abstract type resolution?
ADirective and Scalar
BScalar and Enum
CObject and Input
DInterface and Union
What function is commonly used to resolve an abstract type in GraphQL?
AresolveObject
BresolveType
CresolveQuery
DresolveField
If a GraphQL query requests fields from an interface, what must happen during execution?
AThe interface is ignored and fields are returned as null
BThe query is converted to a union type
CThe concrete type implementing the interface must be identified
DThe query fails immediately
What is the result if abstract type resolution fails in GraphQL?
AThe query returns an error
BThe query returns empty data
CThe query returns default scalar values
DThe query returns all possible fields
Which of the following is NOT an abstract type in GraphQL?
AObject
BInterface
CUnion
DAbstract
Explain how GraphQL resolves an abstract type during query execution.
Think about how GraphQL knows which actual type to use when you query an interface or union.
You got /4 concepts.
    Why is abstract type resolution necessary in GraphQL schemas?
    Consider how clients can query different types through a common abstract type.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the __resolveType function in GraphQL when using interfaces or unions?
      easy
      A. To fetch data from the database
      B. To validate the query syntax before execution
      C. To define new scalar types
      D. To determine the specific object type to return for an abstract type

      Solution

      1. Step 1: Understand abstract types in GraphQL

        Abstract types like interfaces or unions can represent multiple object types.
      2. Step 2: Role of __resolveType

        This function tells GraphQL which concrete type to use for the returned data.
      3. Final Answer:

        To determine the specific object type to return for an abstract type -> Option D
      4. Quick Check:

        Abstract type resolution = determine specific type [OK]
      Hint: Remember: __resolveType picks the exact type [OK]
      Common Mistakes:
      • Confusing __resolveType with data fetching
      • Thinking it validates query syntax
      • Assuming it defines scalar types
      2. Which of the following is the correct way to define a __resolveType function in a GraphQL resolver object?
      easy
      A. resolveType(obj) { return obj.typeName; }
      B. __resolveType(obj) { return obj.kind; }
      C. __resolveType(obj) { return obj.__typename; }
      D. __resolveType(obj) { return obj.type; }

      Solution

      1. Step 1: Check the naming and return value

        The function must be named exactly __resolveType and return a string matching a type name.
      2. Step 2: Match the returned value to the data field

        Commonly, the field __typename holds the type name, so returning obj.__typename is correct.
      3. Final Answer:

        __resolveType(obj) { return obj.__typename; } -> Option C
      4. Quick Check:

        Correct function name and return field = __resolveType(obj) { return obj.__typename; } [OK]
      Hint: Function must be named exactly __resolveType [OK]
      Common Mistakes:
      • Using wrong function name like resolveType
      • Returning incorrect property like type
      • Returning undefined or wrong field
      3. Given this resolver snippet for a union type:
      __resolveType(obj) {
        if (obj.price) return 'Book';
        if (obj.author) return 'Author';
        return null;
      }

      What will be the resolved type for { price: 20, author: 'John' }?
      medium
      A. Book
      B. Author
      C. null
      D. Error

      Solution

      1. Step 1: Check conditions in order

        The function first checks if obj.price exists, which is true here.
      2. Step 2: Return first matching type

        Since obj.price is true, it returns 'Book' immediately without checking further.
      3. Final Answer:

        Book -> Option A
      4. Quick Check:

        First true condition returns 'Book' [OK]
      Hint: Check conditions top to bottom, first match wins [OK]
      Common Mistakes:
      • Assuming it returns 'Author' because author field exists
      • Thinking it returns null if multiple fields exist
      • Expecting an error for multiple matches
      4. You wrote this __resolveType function:
      __resolveType(obj) {
        if (obj.kind === 'User') return 'User';
        if (obj.kind === 'Admin') return 'Admin';
      }

      But your GraphQL query returns null for the type. What is the likely problem?
      medium
      A. Function name should be resolveType without underscores
      B. Missing a return statement for unmatched cases
      C. The kind field does not exist in obj
      D. GraphQL does not support __resolveType for interfaces

      Solution

      1. Step 1: Check function completeness

        The function lacks a return for cases when obj.kind is neither 'User' nor 'Admin'.
      2. Step 2: Understand GraphQL behavior

        If no type is returned, GraphQL resolves the type as null, causing query issues.
      3. Final Answer:

        Missing a return statement for unmatched cases -> Option B
      4. Quick Check:

        Always return a type or null explicitly [OK]
      Hint: Always return a type or null in __resolveType [OK]
      Common Mistakes:
      • Using wrong function name without underscores
      • Assuming missing return defaults to a type
      • Believing GraphQL doesn't support __resolveType
      5. You have a GraphQL interface Vehicle implemented by types Car and Bike. Your __resolveType function is:
      __resolveType(obj) {
        return obj.wheels === 4 ? 'Car' : 'Bike';
      }

      If an object has { wheels: 0 }, what will happen when querying this interface?
      hard
      A. It will resolve to 'Bike' because wheels is not 4
      B. It will resolve to 'Car' because 0 is falsy
      C. It will cause a runtime error due to invalid wheels
      D. It will return null and cause query failure

      Solution

      1. Step 1: Evaluate the ternary condition

        The condition checks if obj.wheels === 4. For 0, this is false.
      2. Step 2: Determine returned type

        Since condition is false, it returns 'Bike'.
      3. Final Answer:

        It will resolve to 'Bike' because wheels is not 4 -> Option A
      4. Quick Check:

        Condition false returns 'Bike' [OK]
      Hint: Check exact equality, not truthiness, in __resolveType [OK]
      Common Mistakes:
      • Confusing falsy 0 with true condition
      • Expecting runtime error for zero wheels
      • Assuming null return causes failure