Схема должна содержать уникальные именованные типы, но содержит несколько типов с именем «Страница» - PullRequest
0 голосов
/ 16 ноября 2018

Я создал функцию страницы GraphQL.Однако, когда я пытаюсь использовать его повторно, я получаю сообщение об ошибке

Схема должна содержать уникальные именованные типы, но содержит несколько типов с именем "Страница"

Я знаю, что могу изменить Page для двух одинаковых функций и присвойте им имена JobsPage и PrintsPage.

Однако существует ли простой способ повторно использовать его?Спасибо

function Page(itemType) {
  return new GraphQLObjectType({
    name: 'Page',
    fields: () => ({
      totalCount: { type: GraphQLInt },
      edges: { type: new GraphQLList(Edge(itemType)) },
      pageInfo: { type: PageInfo }
    })
  });
}


const PrinterType = new GraphQLObjectType({
  name: 'Printer',
  fields: () => ({
    id: { type: GraphQLString },

    jobs: {
      type: Page(JobType),     // here I use Page first time
      args: {
        first: {
          type: GraphQLInt
        },
        after: {
          type: GraphQLString
        }
      },
      resolve(parentValue, args) {
        const { id } = parentValue;
        const { first, after } = args;

        return getPageJobs({ id, first, after });
      }
    },

    prints: {
      type: Page(PrintType),   // here I use Page again
      args: {
        first: {
          type: GraphQLInt
        },
        after: {
          type: GraphQLString
        }
      },
      resolve(parentValue, args) {
        const { id } = parentValue;
        const { first, after } = args;

        return getPagePrints({ id, first, after });
      }
    },
  })
});

1 Ответ

0 голосов
/ 16 ноября 2018

Я пропустил это просто чистая функция, я могу передать второе значение ...

Вот одно из решений.

function Page(itemType, name) {
  return new GraphQLObjectType({
    name: `${name}Page`,
    fields: () => ({
      totalCount: { type: GraphQLInt },
      edges: { type: new GraphQLList(Edge(itemType, name)) },
      pageInfo: { type: PageInfo }
    })
  });
}


const PrinterType = new GraphQLObjectType({
  name: 'Printer',
  fields: () => ({
    id: { type: GraphQLString },

    jobs: {
      type: Page(JobType, 'Jobs'),     // here I use Page first time
      args: {
        first: {
          type: GraphQLInt
        },
        after: {
          type: GraphQLString
        }
      },
      resolve(parentValue, args) {
        const { id } = parentValue;
        const { first, after } = args;

        return getPageJobs({ id, first, after });
      }
    },

    prints: {
      type: Page(PrintType, 'Prints'),   // here I use Page again
      args: {
        first: {
          type: GraphQLInt
        },
        after: {
          type: GraphQLString
        }
      },
      resolve(parentValue, args) {
        const { id } = parentValue;
        const { first, after } = args;

        return getPagePrints({ id, first, after });
      }
    },
  })
});
...