Field Nullability
By default, Grats makes all fields nullable in keeping with GraphQL best practices. By modeling fields as nullable by default, any error encountered when evaluating a resolver function/method will be caught by the GraphQL executor and returned as a null
value with error metadata attached to the response.
This approach allows for maximally resilient network requests, since a single error will not take down the entire query, generally it will only affect the field that threw the error.
If you find this pervasive nullability makes client application development frustrating, you may wish to enable Semantic Nullability.
@killsParentOnException
However, there are some fields where it is necessary to have a non-nullable field, for example for id
. In this case, you may add the docblock tag @killsParentOnException
to the field. This will cause the field to be typed as non-nullable, but it comes at a price. Should the resolver throw, the error will bubble up to the first nullable parent.
If @killsParentOnException
is used too liberally, small errors can take down huge portions of your query.
/** @gqlType */
class MyType {
/**
* @gqlField
* @killsParentOnException
*/
myField(): string {
if (Math.random() > 0.5) {
throw new Error("Bang");
}
return "Whew!";
}
}
Would extract:
type MyType {
myField: String!
}
Changing the default
This behavior can be changed by setting the config option { "nullableByDefault": false }
.
Disabling nullableByDefault
is equivalent to marking all non-nullable fields as @killsParentOnException
.