Разрешение типа GraphQLObjectType с разными вложенными аргументами

#typescript #graphql-js

#typescript #graphql-js

Вопрос:

Возможно, я подхожу к этому неправильно, но похоже GraphQLObjectType , что с разными args для их полей будут разрешаться только для первого дочернего поля. Есть ли лучшее соглашение или структура, которых мне здесь не хватает?

В примере:

 import { GraphQLFloat, GraphQLNonNull, GraphQLObjectType, GraphQLString } from 'graphql';

export default new GraphQLObjectType({
  name: 'Parent',
  fields: {
    firstChild: {
      type: GraphQLString,
      args: {
        text: { type: new GraphQLNonNull(GraphQLString) },
      },
      resolve: (_: never, { text }: { text: string }) => {
        return text;
      },
    },

    secondChild: {
      type: GraphQLFloat,
      args: {
        float: { type: new GraphQLNonNull(GraphQLFloat) },
      },
      resolve: (_: never, { float }: { float: number }) => {
        return float;
      },
    },
  },
});
  

Разрешение для secondChild приведет к ошибке для typescript с

 Type '(_: never, { float }: { float: number; }) => number' is not assignable to type 'GraphQLFieldResolver<never, any, { text: string; }>'.
  Types of parameters '__1' and 'args' are incompatible.
    Property 'float' is missing in type '{ text: string; }' but required in type '{ float: number; }'.ts(2322)
test.ts(21, 40): 'float' is declared here.
definition.d.ts(470, 3): The expected type comes from property 'resolve' which is declared here on type 'GraphQLFieldConfig<never, any, { text: string; }>'
  

Ответ №1:

Похоже, что решение также было предложено в https://github.com/graphql/graphql-js/issues/2152 и пиар с https://github.com/graphql/graphql-js/pull/2488