Вы можете использовать inputObjectType , как показано в документации:
export const SomeFieldInput = inputObjectType({
name: "SomeFieldInput",
definition(t) {
t.string("name", { required: true });
t.int("priority");
},
});
Убедитесь, что тип включен как часть types
, который вы передаете makeSchema
.Затем вы можете использовать его для определения аргумента, например
args: {
input: arg({
type: "SomeFieldInput", // name should match the name you provided
}),
}
Теперь значение аргумента будет доступно вашему распознавателю как обычный объект JavaScript, а не как строка.Если вам нужен список входных объектов или вы хотите указать требуемый аргумент, вы должны использовать те же параметры , которые вы предоставили бы при использовании скаляра - list
, nullable
, description
и т. д.
Вот полный пример:
const Query = queryType({
definition(t) {
t.field('someField', {
type: 'String',
nullable: true,
args: {
input: arg({
type: "SomeFieldInput", // name should match the name you provided
}),
},
resolve: (parent, { input }) => {
return `You entered: ${input && input.name}`
},
})
},
})
const SomeFieldInput = inputObjectType({
name: "SomeFieldInput",
definition(t) {
t.string("name", { required: true });
},
});
const schema = makeSchema({
types: {Query, SomeFieldInput},
outputs: {
...
},
});
Затем запросите его следующим образом:
query {
someField(
input: {
name: "Foo"
}
)
}
Или используя переменные:
query($input: SomeFieldInput) {
someField(input: $input)
}