Как передать существующий объект GraphQLSchema в функцию Apollo makeExecutableSchema

Как я могу передать существующий объект GraphQLSchema, такой как graphql-iso-date, в функцию makeExecutableSchema, чтобы использовать его вместе с моими строковыми типами и функциями преобразователя? Скажем, в следующем определении типа я хочу, чтобы свойство date было GraphQLDate из упомянутого пакета.

import { GraphQLDate, GraphQLTime, GraphQLDateTime } from 'graphql-iso-date';

let typeDefs = [];
typeDefs.push(`
  type MyType {
    date: Date
  }
`);

let resolvers = {
  Query: () => { /* ... */ },
};

makeExecutableSchema({ typeDefs, resolvers });
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
0
0
234
1

Ответы 1

Оказывается, карта resolvers, которая передается в makeExecutableSchema, действительно принимает GraphQLScalarType, а тип Date является скалярным. Хотя нам еще нужно добавить типы в typeDefs вручную ...

typeDefs.push('scalar Date');

а также

resolvers.Date = GraphQLDate;

Итак, я создал модуль внешних скаляров в своем проекте и делаю

import externalTypes from './externalTypes';
import printType from 'graphql';

// Define my typeDefs and resolvers here

for (let externalType of externalTypes) {
  let { name } = externalType;
  typeDefs.push(printType(externalType));
  resolvers[name] = externalType;
}

makeExecutableSchema({ typeDefs, resolvers });

Я понял это методом проб / отказа и только потом нашел в документы, таким образом разместив. Кроме того, я до сих пор не знаю, как мне добавить нескалярный тип таким образом (ну, кроме того, чтобы вручную написать его определение типа).

Также здесь становится удобной функция printType, которая печатает определение схемы из переданного объекта типа (подробнее см. этот вопрос).

Другие вопросы по теме