说我有这个:
type Page {
id: ID!
title: String!
body: String!
comments: [Comment]
}
type Comment {
id: ID!
text: String!
someOtherField: String!
optional: String
}
mutation AddPage (input: AddPageInput): Page!
input AddPageInput {
title: String!
body: String
comment: AddPageCommentInput
}
input AddPageCommentInput {
text: String!
someOtherField: String!
optional: String
}
mutation AddComment (input: AddCommentInput): Comment!
input AddCommentInput {
forPageId: ID!
text: String!
someOtherField: String!
optional: String
}
我想对AddPageCommentInput
进行重复数据删除,因为除了AddCommentInput
外,它与forPageId
具有相同的字段。
我尝试做的是让AddPage
解析器只需将AddPageCommentInput
委托给AddComment
解析器(保存Page
并扩展后输入forPageId
)
继承(手动键入定义)是确保事物一致的唯一方法吗?
修改的 我没有这些类型,只是尝试为问题提供背景信息。
更有说服力的问题是:"我有什么选择来模仿输入的继承?"
答案 0 :(得分:0)
你可以通过稍微改造一下(并在此过程中使其更清晰)来破坏问题:
input CommentInput {
text: String!
someOtherField: String!
optional: String
}
input AddPageInput {
title: String!
body: String
comment: CommentInput
}
input AddCommentToPageInput {
pageId: ID!
comment: CommentInput!
}
type AddCommentToPagePayload {
page: Page!
comment: Comment!
}
mutation AddPage(input: AddPageInput!): Page!
mutation AddCommentToPage(input: AddCommentToPageInput!): AddCommentToPagePayload!
答案 1 :(得分:0)
以下是一个建议:您可以从forPageId
中取出AddCommentInput
字段,并将其用作第二个参数。这样您就可以放弃AddPageCommentInput
并在两个地方使用AddCommentInput
。
代码看起来像这样:
mutation AddPage (input: AddPageInput): Page!
input AddPageInput {
title: String!
body: String
comment: AddCommentInput
}
mutation AddComment (forPageId: ID!, input: AddCommentInput): Comment!
input AddCommentInput {
text: String!
someOtherField: String!
optional: String
}