我有一个如此定义的突变:
# POST a new Translation
createTranslation(
name: String!
options: [OptionInput!]!
): Translation
根据我的理解,使用[OptionInput!]!
means that an array is REQUIRED, and an object of the type OptionInput is also REQUIRED.
但是,从我的客户端,我能够在选项数组中没有任何对象的情况下成功发布:
const createTranslation = gql`
mutation createTranslation(
$name: String!,
$options: [OptionInput!]!
) {
createTranslation(
name: $name,
options: $options
) {
_id
}
}
`;
即使我期待开箱即用的验证错误(样本响应):
{
"data": {
"translations": [
{
"_id": "59fa1b7a3d4d4805ed6f7539",
"name": "Sample Translation Name!!!",
"options": []
}
]
}
}
确保使用对象数组的子字段不包含任何空值的正确方法是什么?
PS:这是我输入的OptionInput
input OptionInput {
text: String!
value: String!
}
答案 0 :(得分:1)
正如文档所述,如果列表中的类型是非空的:
这意味着列表本身可以为null,但它不能有 null成员。
这意味着空数组仍然有效,但是任何项本身为空的数组都不是。
[OptionInput]
表示所有这些都有效:
[OptionInput!]
表示所有这些都有效:
[OptionInput]!
表示所有这些都有效:
[OptionInput!]!
表示所有这些都有效:
如果您需要阻止客户端提供空数组,您需要检查解析器中的参数是否为空数组,然后只是抛出错误。