🎬 That's a Wrap for GraphQLConf 2024! • Watch the Videos • Check out the recorded talks and workshops
Input Unions

Some inputs will behave differently depending on what input we choose. Let’s look at the case for a field named product, we can fetch a Product by either its id or its name. Currently we’d make a tradeoff for this by introducing two arguments that are both nullable, now if both are passed as null we’d have to handle that in code. To fix this the @oneOf directive was introduced so we can create these input-unions without sacrificing the strictly typed nature of our GraphQL Schema.

const schema = buildSchema(`
  type Product {
    id: ID!
    name: String!
  }
 
  input ProductInput @oneOf {
    id: ID
    name: String
  }
 
  type Query {
    product(input: ProductInput!): Product
  }
`);

It doesn’t matter whether you have 2 or more inputs here, all that matters is that your user will have to specify one, and only one, for this input to be valid.