Большая часть моей проверки ввода доступна на уровне GraphQL. Я хотел бы улучшить его, сделав определенные поля обязательными, если другие поля имеют определенные значения. Я думаю, что это можно было бы сделать с помощью пользовательских директив, но после небольшого эксперимента я все еще не уверен. Можно ли получить доступ к значению одноуровневого поля в директиве поля?


Трудно сказать, подходит ли это вашему конкретному сценарию без дополнительного контекста, но, надеюсь, это поможет:
Ваша директива будет иметь примерно такой вид:
export class MyDirective extends SchemaDirectiveVisitor {
visitFieldDefinition(field) {
const { resolve = defaultFieldResolver } = field;
const directiveArgs = { ...this.args };
field.resolve = async function(obj, args, context, info) {
...
оттуда вы можете получить значения других полей этого типа, обратившись к obj.
например для схемы, которая имеет:
type MyType {
foo: String
bar: String @MyDirective
}
вы можете создать полосу разрешения ошибок в директиве, выполнив:
export class MyDirective extends SchemaDirectiveVisitor {
visitFieldDefinition(field) {
const { resolve = defaultFieldResolver } = field;
const directiveArgs = { ...this.args };
field.resolve = async function(obj, args, context, info) {
let result = resolve.call(this, result, args, context, info);
if (obj.foo === "something" && result === null) throw new Error("Some error");
return result
Это для возвращаемых типов. Мне нужна проверка типов ввода:]