import { GraphQLError } from 'graphql/error' ; import { GraphQLString , GraphQLObjectType } from 'graphql/type' ; interface SomeExtension { meaningOfLife : 42 ; } declare module 'graphql' { interface GraphQLObjectTypeExtensions < _TSource , _TContext > { someObjectExtension ? : SomeExtension ; } interface GraphQLFieldExtensions < _TSource , _TContext , _TArgs > { someFieldExtension ? : SomeExtension ; } interface GraphQLArgumentExtensions { someArgumentExtension ? : SomeExtension ; } } const queryType = new GraphQLObjectType ( { name : 'Query' , fields : ( ) => ( { sayHi : { type : GraphQLString , args : { who : { type : GraphQLString , extensions : { someArgumentExtension : { meaningOfLife : 42 } } } } , resolve : ( _root , args ) => 'Hello ' + ( args . who || 'World' ) , extensions : { someFieldExtension : { meaningOfLife : 42 } } } } ) , extensions : { someObjectExtension : { meaningOfLife : 42 } } } ) ; function checkExtensionTypes ( _test ) { } checkExtensionTypes ( queryType . extensions . someObjectExtension ) ; const sayHiField = queryType . getFields ( ) . sayHi ; checkExtensionTypes ( sayHiField . extensions . someFieldExtension ) ; checkExtensionTypes ( sayHiField . args [ 0 ] . extensions . someArgumentExtension ) ; declare module 'graphql' { export interface GraphQLErrorExtensions { someErrorExtension ? : SomeExtension ; } } const error = new GraphQLError ( 'foo' ) ; checkExtensionTypes ( error . extensions . someErrorExtension ) ;