You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定义可被编译器校验的GraphQL指令对象数组参数?

定义带编译期校验的GraphQL指令对象数组参数

首先明确:GraphQL指令的参数只能用输入类型(Input Type)——也就是input关键字定义的类型,不能用type声明的对象类型,所以你把Data改成type时触发的报错是符合规范的正常行为。

至于你遇到的input类型参数没被校验的情况,这大概率是你用的GraphQL编译工具的问题。按照GraphQL官方规范,指令参数必须严格匹配对应的input结构,不符合的参数应该在编译阶段直接报错。

要实现带编译期校验的指令对象数组参数,你最开始的写法本身就是正确的,关键是要确保使用的GraphQL工具(比如GraphQL.js、Apollo Server这类)支持完整的指令参数校验:

input Data {
    someField: String!
    anotherField: String!
}
directive @someDirective( args: [Data!]! ) on OBJECT

# 符合Data结构,编译正常通过
type SomeType @someDirective( args: [{someField: "blah", anotherField: "blah"}] ) {
    empty: String
}

# 不符合Data结构,规范要求编译时直接报错
# type AnotherType @someDirective( args: [{blah: "blah", blah2: "blah"}] ) {
#     empty: String
# }

如果你的工具没做校验,建议升级对应的GraphQL库版本,或者检查工具配置——有些工具可能默认关闭了部分校验规则,需要手动开启。

总结两点:

  • 指令参数必须用input类型,type类型不被允许
  • 合规的GraphQL工具都会对指令参数做编译期校验,没校验是工具的问题,不是写法的问题

内容的提问来源于stack exchange,提问作者jmc42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:09:31