我有一个数据建模,其中相同的字段可以有不同的内容类型,具体取决于条件 (type
)。我能够使用联合类型在响应上处理它并且工作得很好,但是我不能对输入做同样的事情,因为联合输入不存在,也没有像 any
或 graphql 中的泛型之类的东西。
我的解决方案是在输入中将此字段作为字符串键入并解析它以发送到解析器上的相应 API。它有点工作,但让我遇到了另一个问题......在将其发送到 graphql 之前要求所有客户端对其内容进行字符串化似乎并不实用/可扩展。
在我的代码的一些相关部分下面。我删除了不相关的字段,在 FieldType
中实际上有两个以上,内容也不同。
enum FieldType {
CHECK
TEXT
}
# graphql types used for outputting the content field
type CheckContent {
checked: Boolean
}
type TextContent {
value: String
}
union FieldContentType = CheckContent | TextContent
type Field {
id: ID!
type: FieldType!
content: FieldContentType!
}
#corresponding graphql type used for the input
input NewField {
type: FieldType!
content: String!
}
对于查询,我有类似的东西,而且效果很好
fields {
id
type
content {
... on CheckContent {
checked
}
... on TextContent {
value
}
}
}
所以我的问题基本上是,1)有没有更好的方法来接受同一字段的多种输入类型?如果不是 2) 我可以使用一些 Apollo 的生命周期方法(例如 requestDidStart
)来拦截请求并在将其与 graphql 类型进行比较之前对该字段进行字符串化吗?
提前致谢!