Как я могу передать существующий объект 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 });


Оказывается, карта 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, которая печатает определение схемы из переданного объекта типа (подробнее см. этот вопрос).