Можно ли реализовать несколько интерфейсов в GraphQL?

Можно ли указать тип, который реализует несколько интерфейсов в схеме GraphQL? Если так, как это будет достигнуто?

3 ответа

Конечно, вот простой пример, который вы можете подключить к Launchpad и поэкспериментировать с:

import { makeExecutableSchema } from 'graphql-tools';

const typeDefs = `
  type Query {
    greeting: Greeting
    farewell: Farewell
  }
  type Dialog implements Greeting, Farewell {
    hello: String
    goodbye: String
    speaker: String
  }
  interface Greeting {
    hello: String
  }
  interface Farewell {
    goodbye: String
  }
`;

const resolvers = {
  Query: {
    greeting: (root, args, context) => {
      return { hello: 'Hello world!', speaker: 'Bob' };
    },
    farewell: (root, args, context) => {
      return { goodbye: 'Goodbye, cruel world!', speaker: 'Sue' };
    },
  },
  Greeting: {
    __resolveType: () =>  'Dialog'
  },
  Farewell: {
    __resolveType: () =>  'Dialog'
  }
};

export const schema = makeExecutableSchema({
  typeDefs,
  resolvers,
});

export function context(headers, secrets) {
  return {
    headers,
    secrets,
  };
};

Кажется, запятая, разделяющая интерфейсы, больше не работает. Мне пришлось использовать "&" вместо этого, чтобы заставить его работать (Аполлон), см. Этот ответ /questions/44815428/realizovat-neskolko-interfejsov-v-graphql/44815444#44815444

type Something implements First & Second

Я думаю, что да, это должно быть возможно, поскольку спецификация описана на http://facebook.github.io/graphql/June2018/.

Вот пример.

interface NamedEntity {
  name: String
}

interface ValuedEntity {
  value: Int
}

type Person implements NamedEntity {
  name: String
  age: Int
}

type Business implements NamedEntity & ValuedEntity {
  name: String
  value: Int
  employeeCount: Int
}
Другие вопросы по тегам