#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