Skip to content
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

GraphQL issues with __typename and interfaces/unions #254

Open
pstoica opened this issue Nov 30, 2022 · 0 comments
Open

GraphQL issues with __typename and interfaces/unions #254

pstoica opened this issue Nov 30, 2022 · 0 comments

Comments

@pstoica
Copy link

pstoica commented Nov 30, 2022

I'm trying to use this library to mock Apollo and am running into a few issues when using the generics (.query<Query, Variables>):

  1. __typename is required and expects a predetermined value. String is a superset and won't work.
    • Workaround: __typename: () => "User" as const,
  2. Interfaces (and possibly unions).. are a bit odd.
    • Some of these fields are only present in some implementations. .create has no awareness of this, but I do expect to perform .find on one collection to find any of the types, since a getAnimal query might return any type of animal.
    • I also end up defining defaults for all fields, even if they're not relevant to that type.
    • The __typename ends up determining what objects are compatible. I can no longer enforce a union here (e.g. Animal interface potentially has "Cat" | "Dog" | "Elephant") since the __typename determines how the type is matched and what fields must be present.
    • __typename can technically be undefined, but nullable only adds | null. I don't really want a default here.
    • Workaround: __typename: () => "Cat" as any, (or undefined as any will work too)

At this point it's a little easier to use .query<any, Variables>, but the types were otherwise helpful for developer experience and catching missing fields.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant