graphql-static-binding icon indicating copy to clipboard operation
graphql-static-binding copied to clipboard

Typescript --strictFunctionTypes parameter incompatibility

Open stephentuso opened this issue 7 years ago • 0 comments

Edit: This only happens with strictFunctionTypes. Seems like it would be good to support that

Using binding-ts, I'm getting some errors in the generated ts file:

generated/starchive-api.ts(28,3): error TS2416: Property 'query' in type 'Binding' is not assignable to the same property in base type 'Binding<QueryMap, SubscriptionMap>'.
  Type 'Query' is not assignable to type 'QueryMap'.
    Property 'helloWorld' is incompatible with index signature.
      Type '(args: {}, context: { [key: string]: any; }, info?: string | GraphQLResolveInfo | undefined) => P...' is not assignable to type '(args?: { [key: string]: any; } | undefined, context?: { [key: string]: any; } | undefined, info?...'.
        Types of parameters 'args' and 'args' are incompatible.
          Type '{ [key: string]: any; } | undefined' is not assignable to type '{}'.
            Type 'undefined' is not assignable to type '{}'.

Am I missing something? All the parameters in QueryMap are optional so shouldn't the generated

export type Query = {
  helloWorld: (args: {}, context: { [key: string]: any }, info?: GraphQLResolveInfo | string) => Promise<String | null>
}

actually be this?

export type Query = {
  helloWorld: (args?: {}, context?: { [key: string]: any }, info?: GraphQLResolveInfo | string) => Promise<String | null>
}

However, making that change causes another issue because Binding#delegate doesn't have optional parameters either

stephentuso avatar Feb 28 '18 22:02 stephentuso