GraphQL输入类型可以继承自另一个类型或接口吗?

kyr*_*isu 32 graphql

是否可以使用GraphQL输入类型的继承?

类似的东西(当然,这不适用于输入类型):

interface UserInputInterface {
  firstName: String
  lastName: String
}

input UserInput implements UserInputInterface {
  password: String!
}

input UserChangesInput implements UserInputInterface {
  id: ID!
  password: String
}
Run Code Online (Sandbox Code Playgroud)

kaq*_*qao 22

不,规范不允许输入类型实现接口.而GraphQL类型系统一般不定义任何形式的继承.甚至接口也不能继承其他接口.故意限制规范以保持简单.这意味着您不得不跨输入类型重复字段.

也就是说,根据构建模式的方式,您可以构建某种类型的变换器,它基于某些元数据(例如指令)以编程方式附加公共字段.


Dan*_*scu 5

GraphQL规范June2018稳定版本开始,输入对象类型可以扩展另一种输入对象类型:

输入对象类型扩展名用于表示已从某些原始输入对象类型扩展的输入对象类型。

这本身不是继承;而是继承。您只能扩展基本类型,而不能基于该基本类型创建新类型:

extend input MyInput {
  NewField: String
}
Run Code Online (Sandbox Code Playgroud)

注意,新类型没有名称。现有MyInput类型已扩展。

JavaScript参考实现已在GraphQL.js v14(2018年6月)中实现了Input Object扩展,但尚不清楚如何在不出错的情况下将扩展的输入字段实际传递给查询

有关实际的类型继承,请参见graphql-s2s库