Giter Site home page Giter Site logo

Comments (10)

pie6k avatar pie6k commented on May 22, 2024

I'd say typegql class itself might be good interface.

You can also try prisma bindings for creating interface for exiting graphql api

from typegql.

arjunyel avatar arjunyel commented on May 22, 2024

I thought about using the class but the difference is an interface is only used by the compiler while a class generates code.

So if you were using the class on a client they would have to include the class code in their bundle

from typegql.

pie6k avatar pie6k commented on May 22, 2024

Do you think that would be helpful for you - https://github.com/dangcuuson/graphql-schema-typescript

from typegql.

arjunyel avatar arjunyel commented on May 22, 2024

Unfortunately that looks like it it was created for the server side resolver typings, not client side code like apollo-codegen.

This article talks about the difference between and interface and a class https://toddmotto.com/classes-vs-interfaces-in-typescript#using-typescript-interface

Seems like you'd have to generate .graphql files so Apollo Codegen can use them or somehow generate a JSON representation and use a tool like this http://json2ts.com/

from typegql.

MichalLytek avatar MichalLytek commented on May 22, 2024

The recommended way of working with GraphQL and TypeScript on client side:

  1. Run the GraphQL API server (created with typegql or sth)
  2. Generate the schema.json from localhost:PORT using apollo-codegen
    2*) Use the schema.json with vscode plugin for graphql intellisense
  3. Use apollo-codegen to generate TypeScript interfaces describing the queries you use on client side using gql template tag in code (and using the generated schema.json).
  4. Use this interfaces to annotate e.g. graphql generic HOC in React.

Sample command that creates schema.json and generate interfaces for queries/mutations:

apollo-codegen introspect-schema http://localhost:3000/graphql --output ./src/graphql/schema.json && apollo-codegen generate src/graphql/**/*.ts --schema ./src/graphql/schema.json --target typescript --output ./src/graphql/types.ts

from typegql.

arjunyel avatar arjunyel commented on May 22, 2024

Thank you for the help! For part 3 are you saying you need to write some client code using gql then combine that with the schema.json? Or where is the gql code located?

from typegql.

MichalLytek avatar MichalLytek commented on May 22, 2024

No, you this is the normal code you write on the client - the queries and mutations. You want to generate TypeScript interfaces describing the shape of args and response, don't you?

from typegql.

arjunyel avatar arjunyel commented on May 22, 2024

Ideally I'd just write a typeql server and from that alone I could generate interfaces a client could use. For example when I write an apollo-server it can generate the schema.json and it has the gql code that apollo-codegen needs all in one.

from typegql.

MichalLytek avatar MichalLytek commented on May 22, 2024

This is the part - generate schema.json from apollo-server:
apollo-codegen introspect-schema http://localhost:3000/graphql --output ./src/graphql/schema.json

For client you need to write in your frontend app:

const myQuery = gql`
  query {
   myQuery {
     fieldOne
     other {
       fieldTwo
     }
   }
 }
`;

And then you can run apollo-codegen generate src/graphql/**/*.ts --schema ./src/graphql/schema.json --target typescript --output ./src/graphql/types.ts to have interface myQuery { ... } inside types.ts.

I could generate interfaces a client could use.

Nope, you can't. The GraphQL schema by itself is the interfaces the describe the API that server expose and client can use.

from typegql.

arjunyel avatar arjunyel commented on May 22, 2024

Thank you for your help!

from typegql.

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.