-
Notifications
You must be signed in to change notification settings - Fork 177
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update/fix the existing TS declaration file #285
Conversation
This commit modernizes/fixes the existing TypeScript declaration file as follows: - The module declaration now better represents how exports are currently setup, by using module augmentation to give access to helper functions that are added to the `gql` function itself. - Backwards compatibility has been maintained by re-exporting helper functions. - Stronger typing changes; the first param of the `gql` template literal is now a read only string based array, and the `gql` return type is a `DocumentNode`. We're leveraging TS' [import types](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html#import-types) functionality to reference the `DocumentNode` type, which will help avoid issues like the previously reverted attempts to do this in #151 and #196. - While the new `gql` type changes could in theory be considered breaking, they really shouldn't be in practice. Tagged template literals enforce the use of an immutable array of strings, which means that even though `literals` was `any` before, the param should only ever been an array of strings. Along the same lines, the `gql` function has only ever returned a `DocumentNode`, so moving away from the `any` return type should be pretty safe.
3e16e8b
to
08d271a
Compare
The `graphql-tag` declaration file has been updated in apollographql/graphql-tag#285 so we no longer need our own overrides.
This breaks a lot of code. It shouldn't have been published as a patch version.
Now generates a TypeScript compilation error |
@SoyYoRafa what version of TypeScript are you using? |
3.7.5 with this tsconfig.json:
|
Thanks @SoyYoRafa - using the import type of |
The `graphql-tag` declaration file has been updated in apollographql/graphql-tag#285 so we no longer need our own overrides.
Sure, how do you want me to share the reproduction? Pretty this is due to graphql-tag referencing the graphql package in the declaration file and not marking graphql as a dependency. |
This PR modernizes/fixes the existing TypeScript declaration file as follows:
gql
function itself.gql
template literal is now a read only string based array, and thegql
return type is aDocumentNode
. We're leveraging TS' import types functionality to reference theDocumentNode
type, which will help avoid issues like the previously reverted attempts to do this in Reverting #141 until we can figure out why its throwing errors. #151 and Add DocumentNode to gql declaration #196.gql
type changes could in theory be considered breaking, they really shouldn't be in practice. Tagged template literals enforce the use of an immutable array of strings, which means that even thoughliterals
wasany
before, the param should only ever have been an array of strings. Along the same lines, thegql
function has only ever returned aDocumentNode
, so moving away from theany
return type should be pretty safe.Fixes #282
Fixes #150