Javascript 即使缺少所需架构的部分,GraphQL POST也会传递

Javascript 即使缺少所需架构的部分,GraphQL POST也会传递,javascript,ecmascript-6,graphql,Javascript,Ecmascript 6,Graphql,我的突变定义如下: # POST a new Translation createTranslation( name: String! options: [OptionInput!]! ): Translation 据我所知,使用[OptionInput!]的两个引号 但是,从我的客户端,我可以在选项数组中没有任何对象的情况下成功发布: const createTranslation = gql` mutation createTranslation

我的突变定义如下:

# POST a new Translation
    createTranslation(
      name: String!
      options: [OptionInput!]!
    ): Translation
据我所知,使用
[OptionInput!]的两个引号

但是,从我的客户端,我可以在选项数组中没有任何对象的情况下成功发布:

const createTranslation = gql`
  mutation createTranslation(
    $name: String!,
    $options: [OptionInput!]!
  ) {
    createTranslation(
      name: $name,
      options: $options
    ) {
      _id
    }
  }
`;
尽管我预计会出现开箱即用的验证错误(示例响应):

确保使用对象数组的子字段不包含任何空值的正确方法是什么

PS:这是我的输入选项输入

input OptionInput {
    text: String!
    value: String!
  }

根据单据状态,如果列表中的类型为非空:

这意味着列表本身可以为null,但不能有任何值 空成员

这意味着空数组仍然有效,但任何项本身为null的数组都无效

[OptionInput]
表示所有这些都是有效的:

  • 空的
  • [{},空]
  • [{},{}]
  • []
[OptionInput!]
表示所有这些都是有效的:

  • 空的
  • [{},{}]
  • []
[OptionInput]表示所有这些都有效:

  • [{},空]
  • [{},{}]
  • []
[OptionInput表示所有这些都有效:

  • [{},{}]
  • []
如果需要阻止客户端提供空数组,则需要检查解析程序中的参数是否为空数组,然后抛出一个错误

input OptionInput {
    text: String!
    value: String!
  }