From 2482d17990ef4d359e027b4e7a314431983c512c Mon Sep 17 00:00:00 2001 From: Alejandro Corredor Date: Thu, 1 Aug 2019 17:36:46 -0400 Subject: [PATCH] [@types/graphql-resolvers] Allow passing arbitrary TArgs to all utilities (#37227) * Allow passing arbitrary TArgs to all utilities I'm facing an issue when using `graphql-resolvers` along with `graphqlgen` (for generating resolver types: https://github.com/prisma/graphqlgen). I get correct generated types from `graphqlgen`, but when I try to create a resolver using `combineResolvers`, I get a type error. Here is an example: ```js contest: combineResolvers(authHelpers.isAuthenticated, contestResolver) ``` The snippet above gives me this typescript error: ``` Types of parameters 'args' and 'args' are incompatible. Property 'id' is missing in type 'TArgs' but required in type 'ArgsContest'. ``` Where my `contestResolver` has the type `(parent: undefined, args: QueryResolvers.ArgsContest, ctx: Context, info: GraphQLResolveInfo) => Contest | Promise`. Where `ArgsContests` is ``` export interface ArgsContest { id: string; } ``` And my `isAuthenticated` resolver has type `(parent: any, args: any, { me }: Context) => ForbiddenError | undefined`. Since right now I have no way of passing my own `TArgs` I have no other way but to ignore the error. With this PR I introduce the ability to pass a generic `TArgs` of my liking that let's me make typescript happy when using `graphqlgen` generated types. If no generic for that argument is passed, then `TArgsDefault` is used, which is equivalent to what the previous typings had. * Add myself to the contributors list. Forgot to add myself in the first commit. * Fix contributors list Made a mistake adding myself to the list. * fixing contributors list For some reason it did not like the multi-line version either. * correct contributors * fix linting errors, update graphql-tools * format type definitions --- types/graphql-resolvers/index.d.ts | 21 +++++++++------------ types/graphql-resolvers/package.json | 2 +- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/types/graphql-resolvers/index.d.ts b/types/graphql-resolvers/index.d.ts index 292c22cf73..e03cdd561e 100644 --- a/types/graphql-resolvers/index.d.ts +++ b/types/graphql-resolvers/index.d.ts @@ -1,37 +1,34 @@ // Type definitions for graphql-resolvers 0.2 // Project: https://github.com/lucasconstantino/graphql-resolvers#readme // Definitions by: Mike Engel +// Alejandro Corredor // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -// TypeScript Version: 2.6 +// TypeScript Version: 3.0 import { IFieldResolver } from "graphql-tools"; export const skip: undefined; -export interface TArgs { +export interface TArgsDefault { [argument: string]: any; } -export function combineResolvers( +export function combineResolvers( ...resolvers: Array> ): IFieldResolver; -export function pipeResolvers( +export function pipeResolvers( ...resolvers: Array> ): IFieldResolver; -export function allResolvers( +export function allResolvers( resolvers: Array> ): IFieldResolver; -export function resolveDependee( - dependeeName: string -): IFieldResolver; +export function resolveDependee(dependeeName: string): IFieldResolver; -export function resolveDependees( - dependeeNames: string[] -): IFieldResolver; +export function resolveDependees(dependeeNames: string[]): IFieldResolver; -export function isDependee( +export function isDependee( resolver: IFieldResolver ): IFieldResolver; diff --git a/types/graphql-resolvers/package.json b/types/graphql-resolvers/package.json index a3e9046d27..f03532afdb 100644 --- a/types/graphql-resolvers/package.json +++ b/types/graphql-resolvers/package.json @@ -1,6 +1,6 @@ { "private": true, "dependencies": { - "graphql-tools": "^4.0.2" + "graphql-tools": "^4.0.5" } }