例如,Pet
是Animal
,owner
和name
。
type Animal {
species: String
}
type Pet extends Animal {
owner: Owner
name: String
}
答案 0 :(得分:1)
这在GraphQL中是不可能的,但是有一个实验包可能对此有用。
https://github.com/Sydsvenskan/node-graphql-partials
参见示例:
partial LinkFields {
links(
rel: String
type: String
): [Link]
}
partial DocumentFields using LinkFields {
uuid: ID!
# The document type, such as x-im/article
type: String
# If specified, then a list of the products to which this document's availability is limited
products: [String]
# The human readable name of the document, often used publicly to identify the document
title: String
# The specific path on the web page where this document is publicly available
path: String
# A single metadata block
metaBlock(
# The specific metadata block type to get
type: String
): MetadataBlock
}
interface Document using DocumentFields {}
type AuthorDocument implements Document using DocumentFields {}
结果是:
type AuthorDocument implements Document {
links(
rel: String
type: String
): [Link]
uuid: ID!
# The document type, such as x-im/article
type: String
# If specified, then a list of the products to which this document's availability is limited
products: [String]
# The human readable name of the document, often used publicly to identify the document
title: String
# The specific path on the web page where this document is publicly available
path: String
# A single metadata block
metaBlock(
# The specific metadata block type to get
type: String
): MetadataBlock
}
你也可以做什么,因为这些只是字符串是创建一些帮助函数来修改字符串并插入必要的字段。
如果您参与Github的讨论,可以看一下以下问题。
答案 1 :(得分:1)
从June2018 stable version of the GraphQL spec开始,一个对象类型可以扩展另一种对象类型:
对象类型扩展用于表示从某种原始类型扩展过来的类型。例如,它可能用于表示本地数据
在您的示例中,
List
这本身不是继承;您只能扩展基本类型,而不能基于它创建新类型。注意,新类型没有名称。现有的List
类型得到扩展。
graphql.org documentation没有提及关于type Animal {
species: String
}
extend type Animal {
owner: Owner
name: String
}
的任何内容,但是文档是admittedly lackluster,并且是transitioned,从Facebook的所有权到Linux基金会。
JavaScript参考实现doesn't fully support extensions,但是由于您已标记问题apollo-server,因此可以使用graphql-tools
,does:
Animal
有关实际类型继承,请参见graphql-s2s library。
答案 2 :(得分:1)
其他答案正确地提到这不是专门化的类型扩展。
注意,类型扩展似乎有两种语法。根据 Apollo Federation specification,graphql-java 支持 @extend 语法。
在 Apollo 文档中,语法似乎是:
type Animal @key(fields: "id") @extends
但根据联邦规范,还支持另一种语法:
@
某些框架似乎只支持 {{1}} 语法。
答案 3 :(得分:1)
虽然您不能创建子类/子类型,但您可以使用接口进行某种形式的继承:https://graphql.org/learn/schema/#interfaces
以上链接中的示例:
interface Character {
id: ID!
name: String!
friends: [Character]
appearsIn: [Episode]!
}
type Human implements Character {
id: ID!
name: String!
friends: [Character]
appearsIn: [Episode]!
starships: [Starship]
totalCredits: Int
}
type Droid implements Character {
id: ID!
name: String!
friends: [Character]
appearsIn: [Episode]!
primaryFunction: String
}
查询时可以为不同的实现指定特定的字段
hero(episode: $ep) {
name
... on Droid {
primaryFunction
}
... on Human {
totalCredits
}
}