У меня есть мутация, определяемая как таковая:
# POST a new Translation
createTranslation(
name: String!
options: [OptionInput!]!
): Translation
По моему [OptionInput!]!
, используя две кавычки для [OptionInput!]!
означает, что массив НЕОБХОДИМО, и объект типа OptionInput также НЕОБХОДИМО.
Однако, с моей стороны, я могу успешно выполнить POST без каких-либо объектов в массиве Options:
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!
}
Как указано в docs, если тип внутри списка не равен null:
Это означает, что сам список может быть нулевым, но он не может иметь никаких нулевых членов.
Это означает, что пустой массив все еще действителен, но массив, в котором каждый из элементов является нулевым, не является.
[OptionInput]
означает, что все они действительны:
[OptionInput!]
Означает, что все они действительны:
[OptionInput]!
означает, что все они действительны:
[OptionInput!]!
означает, что все они действительны:
Если вам нужно предотвратить предоставление клиентом пустого массива, вам нужно будет проверить, является ли аргумент пустым массивом внутри вашего распознавателя, а затем просто выкидывает ошибку.