Reputation: 410
I'm trying to patch graphql-cli
's get-schema
function to print description using comment. I forked the library [https://github.com/poernahi/graphql-cli] and edited src/cmds/get-schema.ts
:
printSchema(newSchemaResult as GraphQLSchema)
becomes
printSchema(newSchemaResult as GraphQLSchema, {commentDescriptions: true})
When I run npm install
, tsc
did not like my meddling..
src/cmds/get-schema.ts(194,11): error TS2554: Expected 1 arguments, but got 2.
Now I really don't understand this error, because when I look at node_modules/graphql/utilities/schemaPrinter.js.flow
, I see the function signature clearly indicates a second optional parameter.
type Options = {| commentDescriptions?: boolean |};
export function printSchema(schema: GraphQLSchema, options?: Options): string
I tried using undefined
as the second parameter and still get the same error. I read the ts documentation and this is the right syntax to define optional param, even if it is written in flow.
Is this caused by mixing flow and typescript?
How did typescript get the argument list? I walked through the import chain and it pointed to the definition above.
What am I missing? Any workaround?
Thanks
Upvotes: 1
Views: 1397
Reputation: 1088
The TypeScript types do not specify an options
parameter:
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/graphql/utilities/schemaPrinter.d.ts#L4
So it looks like there is a discrepancy between Flow and TS as you suspected.
You could look into overriding the TS typings manually using declaration merging to define your own signature for the printSchema
method. You have to be sure the printSchema
method really accepts the second options
argument though. Perhaps the flow typings are out of date?
Upvotes: 1
Reputation: 841
What you are looking at are the flow type annotations. They have nothing to do, with what TypeScript picks up for the typings of the library. In the case of graphql
the typings actually come from a community hosted typing repository which you can find here: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/graphql
When you take a look at the typing for the function you want to use, you can see, that the second argument is not added and therefore TypeScript doesn't know anything about it: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/graphql/utilities/schemaPrinter.d.ts#L4
So in order for TypeScript to properly know the second argument, you have to add it to the typings file over at DefinitelyTyped.
Upvotes: 2