Можно ли реализовать несколько интерфейсов в 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
}