GithubHelp home page GithubHelp logo

Add Typescript typings about graphql HOT 6 OPEN

miragejs avatar miragejs commented on August 15, 2024 3
Add Typescript typings

from graphql.

Comments (6)

jneurock avatar jneurock commented on August 15, 2024

Thanks for the idea! Can you share some pain points where adding TypeScript would have helped you with this library?

from graphql.

kdembler avatar kdembler commented on August 15, 2024

It's not that painful since the functionality offered by the library isn't that complex and there's only a handful of functions but it's still nice to have. With typings:

  • when working with TS, a developer wouldn't need to provide module declaration, i.e. declare module '@miragejs/graphql'
  • automatic imports by IDE would be supported
  • developers would get better IntelliSense experience
  • TS would check for correct function call arguments

Like I've said, these aren't very outstanding issues, but it's pretty standard nowadays to offer TS support

from graphql.

jneurock avatar jneurock commented on August 15, 2024

Checking in now that #23 was merged to see if this issue can be closed or if there's more work to do. Thanks!!

from graphql.

kdembler avatar kdembler commented on August 15, 2024

#23 is certainly a good start but I'd say there's still more work to be done to close this issue. #23 provides basic types that tsc can infer on its own, but for many cases that may not be good enough. For example, let's look at the generated typings for createGraphQLHandler:

export function createGraphQLHandler(graphQLSchema: any | string, mirageSchema: any, { context, resolvers, root }?: {
    context: any;
    resolvers: any;
    root: any;
}): graphQLHandler;

While its certainly much better than nothing, the typings could be improved. In general, any any (:wink:) instance is a place for improvement because any pretty much disables any type checking. graphQLSchema excepts either string or an AST schema - types for this exists inside graphql package. Same with resolvers - those could be typed as well.

There's also one issue I see introduced with this PR, when I try to provide custom resolvers to the handler, I now also need to pass context and root because those aren't marked as optional, so this example from the README won't work in TS-enabled environment:

const graphQLHandler = createGraphQLHandler(graphQLSchema, this.schema, {
  resolvers: {
    Mutation: {
      // Coerce the record returned from the default resolver to a Boolean
      deletePerson: (obj, args, context, info) =>
        !!mirageGraphQLFieldResolver(...arguments)
    }
  }
})

from graphql.

jneurock avatar jneurock commented on August 15, 2024

Thanks for the feedback!

from graphql.

jneurock avatar jneurock commented on August 15, 2024

It has taken years to find the time to work on a TypeScript version of this library but I finally got around to it. I have released version 0.2.0-alpha.1 to npm. This version is based on the typescript branch. If anyone wants to give it a try, it would be great to see if there are any issues.

There should be not breaking changes when it comes to creating a request handler (the main functionality) but there are some breaking changes to a few functions that I would be surprised to see anyone use.

Thanks in advance for any feedback!

from graphql.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.