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.