GraphQL中能否在Input/Type类型中封装对象?
GraphQL Input类型中能否内联封装对象?
不行,你提供的第二种写法不符合GraphQL的语法规范,无法被解析器识别。
原因说明
GraphQL的输入类型(Input Type)定义规则明确:字段的类型必须是已命名的标量类型、枚举类型、输入类型,或是这些类型结合[](列表)、!(非空)修饰后的形式。你不能直接在字段里内联定义匿名的输入对象结构,必须先通过input关键字定义一个命名的输入类型,再在其他输入类型中引用它。
正确写法(你提供的第一种)
input MyChildInput { territoryId: String! mapsTo: [String!]! } input MyInput { uuid: ID! childInput: [MyChildInput!]! }
为什么不支持内联?
这种设计是为了保证Schema的可维护性和复用性:
- 命名的输入类型可以在多个地方重复引用,避免重复代码
- 让Schema结构更清晰,便于团队协作理解
- 方便客户端工具(比如代码生成器)基于Schema生成对应的类型定义(如TypeScript接口)
内容的提问来源于stack exchange,提问作者Gerrol
相关产品推荐
相关产品推荐

