The goal is to have a single source of truth in Graphql+Typescript projects

  • When we work with Graphql and Typescript, there is a large amount of duplication of data needed. First, we need to define the Graphql types. Then we need to make a variation of that same data for Typescript (interfaces and types). Then we potentially need to update ORMs and Schemas. All from a single alteration of an object model.
  • The idea of the library is to automatically create GraphQL schema definition from TypeScript's classes

Type-graphql provides a buildSchema function which takes in all the resolvers we've made and spits out a Graphql schema.

To avoid the need of schema definition files and interfaces describing the schema, Type-graphql use a bit of reflection magic and decorators.


Types and Fields


  • Mark the class that follows as the type known from GraphQL SDL
class Recipe {
  id: string;


  • Map the class property that follows as a field on the Graphql type


spec: distinct from Graphql Resolvers

Resolvers enable us to perform CRUD actions (queries and mutations).

  • It could be thought of as a Controller from classic REST frameworks.



@Query(returns => [Recipe]) means that the query resolves to an array of Recipe objects

  1. Middleware