Я использую модуль GraphQL types для создания моей схемы GraphQL путем зацикливания множества JSON схем. Кажется, я застрял в проблеме, когда речь заходит о ссылках на другие типы. Как я могу создать тип из JSON схемы и ссылаться на себя или на другие типы перед их созданием?
Все мои типы могут быть ссылками на пути. Файл в пути отвечает за динамическое создание схемы для типа:
import { JSONSchema } from "./index"
import { createGraphQLType } from "../../graphql";
export default createGraphQLType(JSONSchema, "Query")
Функция createGraphQLType
довольно проста, она просто берет типы в JSONSchema и переключает ее на тип GraphQL с помощью используя propertiesToFields()
.
export default (schema: JSONSchema4, resolverType: string) => {
const resolvers = propertiesToFields(schema.properties, resolverType);
return new GraphQLObjectType({
name: schema.title,
description: schema.description,
fields: () => ({...resolvers})
});
};
Однако, когда он сталкивается со ссылкой на другой тип, он возвращает обещание пути к типу GraphQL. Проблема в том, что это возвращает обещание.
const dir = process.env.PWD + "/dist/models";
export default function(name: string): Promise<GraphQLType> {
try {
return import(dir + "/" + name);
} catch (err) {
throw err;
}
};
Это в свою очередь выдает ошибку, когда я пытаюсь запустить схему:
(узел: 74096) UnhandledPromiseRejectionWarning: Ошибка: схема должна содержать уникально именованные типы, но содержит несколько типов с именем "undefined". в typeMapReducer (/Users/vemundeldegard/salire/data-api/node_modules/graphql/type/schema.js:262:13) в typeMapReducer (/ Users / vemundeldegard / salire / data-api / node_modules / graphql / type / схема. js: 286: 20) в typeMapReducer (/Users/vemundeldegard/salire/data-api/node_modules/graphql/type/schema.js:286:20) в Array.reduce () в новой GraphQLSchema ( /Users/vemundeldegard/salire/data-api/node_modules/graphql/type/schema.js:145:28) в /Users/vemundeldegard/salire/data-api/dist/graphql/index.js:34 : 18 в Generator.next () в выполненном (/Users/vemundeldegard/salire/data-api/dist/graphql/index.js:5:58)