Interfaces

An Interface contains the essential fields that will be implemented by multiple ObjectTypes.

The basics:

  • Each Interface is class decorated with InterfaceType.
  • Each attribute decorated with @Field represents a GraphQL Field in the Interface.

Quick example

This example model defines a Character interface with a name. Human and Droid are two implementations of that interface.

import { InterfaceType, ObjectType, Field } from "graphene-js";

@InterfaceType()
class Character {
    @Field(String) name;
}

// Human is a Character implementation
@ObjectType({
    interfaces: [Character]
})
class Human {
    @Field(String) bornIn;
}

// Droid is a Character implementation
@ObjectType({
    interfaces: [Character]
})
class Human {
    @Field(String) function;
}

name is a field on the Character interface that will also exist on both the Human and Droid ObjectTypes (as those implement the Character interface). Each ObjectType may define additional fields.

The above types have the following representation in a schema:

interface Character {
  name: String
}

type Droid implements Character {
  name: String
  function: String
}

type Human implements Character {
  name: String
  bornIn: String
}