Search⌘ K

The Generated AllBooksQuery Type

Learn about the AllBooksQuery type, generated using GraphQL Code Generator.

The generated AllBooksQuery type and the old AllBooksQuery type

Another generated type in the src/generated/graphql.tsx file that we should focus on is the AllBooksQuery type.

export type AllBooksQuery = (
{ __typename?: 'Query' }
& { books: Array<(
{ __typename?: 'Book' }
& Pick<Book, 'title'>
)>}
);
AllBooksQuery type generated using GraphQL Code Generator

This type defines an object that’s roughly the same shape as our old AllBooksQuery type, shown below:

type AllBooksQuery = {
books: Book[];
};

Well, almost. The difference between the two is that the generated AllBooksQuery only accepts objects of the Book type that have a title and no other fields. This generated type expects title because that is the only field we’re querying for in our allBooks query, as shown in the code below:

const allBooksQuery = gql`
query allBooks {
books {
title
}
}
`;

The generated AllBooksQuery type uses Pick, which is TypeScript code for, “Give me the type of Book, but only the ones with these fields.” This means that a response with this shape would be valid according to the BooksQuery type.

{
__typename: 'Query',
books: [
{
__typename: 'Book',
title: 'Active Rails'
}
}

But a response with an extra field such as author or id, like in the code snippet below, would be invalid since we’re limiting the fields of Book to just title.

{
__typename: 'Query',
books: [
{
__typename: 'Book',
id: '1',
title: 'Active Rails'
}
}

These types generated by GraphQL Code Generator, such as AllBooksQuery, will be restricted to the ...