是否可以对 GraphQL 输入类型使用继承?
类似的东西(当然,这不适用于输入类型):
interface UserInputInterface {
firstName: String
lastName: String
}
input UserInput implements UserInputInterface {
password: String!
}
input UserChangesInput implements UserInputInterface {
id: ID!
password: String
}
最佳答案
不,规范不允许输入类型实现接口(interface)。而且 GraphQL 类型系统通常不定义任何形式的继承(extends 关键字将字段添加到现有类型,而不是用于继承)。该规范被有意限制为保持简单。这意味着您将陷入跨输入类型重复字段的困境。
也就是说,根据您构建架构的方式,您可以构建某种类型转换器,根据某些元数据以编程方式附加公共(public)字段,例如指令。这是one such implementation .
更好的是,您也许能够通过组合来解决您的问题(始终牢记composition over inheritance)。 例如
input Name {
firstName: String
lastName: String
}
input UserInput {
name: Name
password: String!
}
input UserChangesInput {
name: Name
id: ID!
password: String
}
客户端现在必须将对象发送到更深的级别,但这听起来并不是避免大重复 block 的代价。它实际上可能对客户端也有好处,因为他们现在可以拥有构建名称的通用逻辑,而不管使用它们的查询/突变如何。
在这个例子中,只有 2 个简单的字段,这种方法有点矫枉过正,但总的来说 - 我认为这是正确的方法。
关于graphql - GraphQL 输入类型可以继承其他类型或接口(interface)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41921137/