graphql-code-generator icon indicating copy to clipboard operation
graphql-code-generator copied to clipboard

feat: add option to add `__typename` to interfaces

Open gabrielschulhof opened this issue 1 month ago • 1 comments

The new option addTypenameToInterfaces adds the __typename field to types resulting from interfaces. The field admits a union of string values, each the name of one of the concrete types implementing the interface.

Also adds field typeUnionOperator to class BaseVisitor so we don't have the literal ' | ' in a bunch of places.

🚨 IMPORTANT: Please do not create a Pull Request without creating an issue first.

Any change needs to be discussed before proceeding. Failure to do so may result in the rejection of the pull request.

Description

Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.

This will allow us to treat incoming objects uniformly using their parent type, and will also allow us to type cast appropriately when the handling of the individual object begins to diverge based on their type.

Related #10522

Type of change

Please delete options that are not relevant.

  • [x] New feature (non-breaking change which adds functionality)
  • [x] This change requires a documentation update

Screenshots/Sandbox (if appropriate/relevant):

Adding links to sandbox or providing screenshots can help us understand more about this PR and take action on it as appropriate

How Has This Been Tested?

A unit test is included. The remaining unit tests verify that no change occurs when the option is absent.

Test Environment:

  • OS: OSX
  • NodeJS: 20

Checklist:

  • [x] I have followed the CONTRIBUTING doc and the style guidelines of this project
  • [x] I have performed a self-review of my own code
  • [x] I have commented my code, particularly in hard-to-understand areas
  • [x] I have made corresponding changes to the documentation
  • [x] My changes generate no new warnings
  • [x] I have added tests that prove my fix is effective or that my feature works
  • [x] New and existing unit tests pass locally with my changes

gabrielschulhof avatar Nov 24 '25 22:11 gabrielschulhof

⚠️ No Changeset found

Latest commit: 28f21a8a4d8114a89ad4b979fbe9453325265786

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

changeset-bot[bot] avatar Nov 24 '25 22:11 changeset-bot[bot]