所以我有一个内部联合类型,需要在运行时解析。在父对象上,我有一个type
字段,它将告诉我发生了什么类型的突变,在同一个父对象上,我有一个payload
字段,它是这种并集类型。
enum OrgMutationType {
JOIN_ORG
LEAVE_ORG
CHANGE_PERMISSIONS
}
union OrgMutatedSubscriptionPayloadUnion =
JoinOrgMutationResponse |
LeaveOrgMutationResponse |
ChangePermissionsMutationResponse
type OrgMutatedSubscriptionPayload {
type: OrgMutationType
payload: OrgMutatedSubscriptionPayloadUnion
}
extend type Subscription {
orgMutated(organization: ID!): OrgMutatedSubscriptionPayload
}
在__resolveType
函数中,我得到了payload
对象,并根据该对象需要解析类型。不幸的是,它们payload
不包含type
对象
所以我拥有的是
OrgMutatedSubscriptionPayloadUnion: {
__resolveType(payload) {
// Here i need to access the `parent.type` to make a switch
// and return the appropriate type
}
}
我要访问的是包含type
字段的父对象,以便我以此为基础进行切换。
我发现,在info
对象(__resolveType
函数中的第三个参数)中,我可以访问rootValue
,这将使我可以访问type
字段。父母
所以我可以做到
OrgMutatedSubscriptionPayloadUnion: {
__resolveType(payload, context, info) {
switch(info.rootValue.type) {
case('JOIN_ORG'):
return 'JoinOrgMutationResponse';
case('LEAVE_ORG'):
return 'LeaveOrgMutationResponse';
...
}
}
}
这样访问它是一个好主意吗?有陷阱吗?
否则,我正在考虑的另一种解决方案是使整个父类型成为联合,这将使我能够访问type
字段并基于该字段进行切换。在那种情况下,尽管我看到我将需要复制更多类型来创建此联合。
有什么建议吗? info.rootValue
是有效的解决方案吗?