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:
Stringwill 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 |