API
list / nonNull
list
Types (including arguments) can be passed into the list()
function to wrap them in a list type.
1import { queryType, stringArg, list } from 'nexus'23queryType({4 definition(t) {5 t.field('tags', {6 type: list('String'), // -> [String]7 args: {8 ids: list(stringArg()) // or list('String') -> [String]9 },10 resolve() {11 // ...12 }13 })14 }15})
⚠️ If nonNullDefaults.input
or nonNullDefaults.output
is true, list('String')
will resolve to nonNull(list(nonNull('String')))
, producing the following type: [String!]!
Below are some usage examples of list()
:
Example | GraphQL Type (nonNullDefaults = false) | GraphQL Type (nonNullDefaults = true) |
---|---|---|
list(nonNull('String')) | [String!] | [String!]! |
list(list('String')) | [[String]] | [[String!]!]! |
nonNull(list('String')) | [String]! | [String!]! |
nonNull(list(nonNull('String'))) | [String!]! | [String!]! |
nonNull
Types (including arguments) can be passed into the nonNull()
function to mark them as non-null.
1import { queryType, stringArg, nonNull } from 'nexus'23queryType({4 definition(t) {5 t.field('tags', {6 type: nonNull('String') // => String!7 args: {8 id: nonNull(stringArg()) // or nonNull('String') => String!9 },10 resolve() {11 // ...12 }13 })14 }15})
In case nonNullDefaults.output
or nonNullDefaults.input
is true
, nonNull
will behave as a no-op.
Below are some more usage examples of nonNull
:
Example | Produced GraphQL Type (nonNullDefaults = true) | Produced GraphQL Type (nonNullDefaults = false) |
---|---|---|
nonNull('String') | String! | String! |
nonNull(list('String')) | [String]! | [String]! |
list(nonNull('String')) | [String!] | [String!] |
nonNull(list(nonNull('String'))) | [String!]! | [String!]! |
nonNull(nonNull('String')) | String! | String! |
nonNull(nullable('String')) | String! | String! |
nullable
The nullable()
helper is intended to be used when nonNullDefaults.output
or nonNullDefaults.input
is true
.
While input and output types are nullable by default, you can set them to be non-nullable globally, or per-type, thanks to the nonNullDefaults
configuration.
When types are non-nullable by default:
String
will resolve tononNull('String')
, producing the typeString!
list('String')
will resolve tononNull(list(nonNull('String')))
, producing the type[String!]!
To revert the non-nullability, we can use the nullable()
helper to mark Types and Arguments as nullable.
1import { queryType, stringArg, nonNull } from 'nexus'23queryType({4 nonNullDefaults: {5 input: true // input types are non-nullable by default6 output: true // output types are non-nullable by default7 },8 definition(t) {9 t.field('tags', {10 type: list(nullable('String')) // => [String]!11 args: {12 id: nullable(stringArg()) // or nullable('String') => String13 },14 resolve() {15 // ...16 }17 })18 }19})
In case nonNullDefaults.output
or nonNullDefaults.input
is false
, nullable
will behave as a no-op.
Below are some more usage examples of nullable()
:
Example | GraphQL Type (nonNullDefaults = false) | GraphQL Type (nonNullDefaults = true) |
---|---|---|
nullable('String') | String | String |
nullable(list('String')) | [String] | [String!] |
list(nullable('String')) | [String] | [String]! |
nullable(list(nullable('String'))) | [String] | [String] |
nullable(nonNull('String')) | String | String |
nonNull(nullable('String')) | String! | String! |
nullable(nullable('String')) | String | String |