非空(Non-Nullable)
在类型关键字后添加一个感叹号 !,即可将其标识为非空类型。在GraphQL中,“非空”的含义不同于一般语言中的“非空”。GraphQL中的非空,指代的仅仅只是不能取null值,亦即只是字面上的非空,而像空字符串 "",空数组 [] 这些在一般语言中代表空含义的值,在GraphQL中并不成立。
例如对于如下字段类型定义:
name: String!
下列取值是合法的:
name: ""
非空与列表组合使用
当非空修饰符修饰的是列表类型时,我们既可以选择修饰列表元素的类型(此时感叹号处于中括号内),也可以选择修饰整个列表(此时感叹号处于中括号外),当然也可以同时修饰二者。此时对取值合法性的理解,应结合上面所述对Non-Nullable的具体含义的认识。
一、修饰列表元素
对于如下字段类型:
friends: [String!]
这表示数组本身可以是null,但是它的成员不能出现任何一个null。因而
friends: null // 有效
friends: [] // 有效
friends: ['a', 'b', null] // 错误
二、修饰列表本身
对于如下字段类型:
friends: [String]!
这表示数组本身是不可以为null的,但是它的成员允许出现null。因此
friends: null // 错误
friends: [] // 有效
friends: [null] // 有效
注意空数组 [] 也是有效的,因为按上面所述,空数组并不属于GraphQL对“空”的定义范畴。