给出GraphQL and
返回类型:
library(dplyr)
library(tidyr)
library(purrr)
library(stringr)
lst1 <- combn(rev(names(df_ref)), 2, FUN = function(nm1)
df_ref %>%
select(nm1), simplify = FALSE)
imap(mget(ls(pattern = "^factor_\\d+_levels$")),
~ list(.x, .y) ) %>%
map2(lst1, ., ~ crossing(.x, !! .y[[2]] := .y[[1]]) %>%
rename_at(vars(ends_with('levels')), ~ str_remove(., '_levels')))
#[[1]]
# A tibble: 3 x 3
# factor_3 factor_2 factor_1
# <fct> <fct> <chr>
#1 3 Y A
#2 3 Y B
#3 3 Y C
#[[2]]
# A tibble: 3 x 3
# factor_3 factor_1 factor_2
# <fct> <fct> <chr>
#1 3 A X
#2 3 A Y
#3 3 A Z
#[[3]]
# A tibble: 3 x 3
# factor_2 factor_1 factor_3
# <fct> <fct> <chr>
#1 Y A 1
#2 Y A 2
#3 Y A 3
要由给定的解析器返回:
union
我收到有关union GetBankAccountsResponseOrUserInputRequest = GetAccountsResponse | UserInputRequest
或type Query {
getBankAccounts: GetBankAccountsResponseOrUserInputRequest!
}
函数的这些警告或错误:
__resolveType
我已经在github问题和SO问题中搜索了几天以寻求解决此错误。
在我的解析器中实施__isTypeOf
或Abstract type N must resolve to an Object type at runtime for field Query.getBankAccounts with value { ..., __isTypeOf: [function __isTypeOf] }, received "undefined". Either the N type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function.'
无效:
__resolveType
答案 0 :(得分:1)
由于在我的解析器中实现__isTypeOf
或export const Query = {
getBankAccounts: (parent, args, context: IContext, info) => {
return {
__isTypeOf(obj) { // OR __resolveType, none of them work
return `GetAccountsResponse`;
},
accounts: []
};
},
};
对我不起作用,因此我最终通过将__resolveType
直接添加到解析器返回对象中解决了这个问题。
在__isTypeOf
解析器实现中:
__typename
希望这对某人有帮助。
答案 1 :(得分:1)
您的解析器映射设置不正确。
传递给ApolloServer
(或makeExecutableSchema
)的解析器映射应该是一个对象,其键为架构中的类型名称,每个键都映射到另一个对象,其键为该类型的字段名称。然后,每个字段名称都映射到解析器功能。
const resolvers = {
SomeType: {
someField: (parent, args, context, info) => { ... },
},
}
您使用相同的解析器映射为联合或接口传递resolveType
函数。模式是相同的,但是类型的名称是联合或接口的名称,而不是字段名称,键是__resolveType
:
const resolvers = {
SomeType: {
someField: (parent, args, context, info) => { ... },
},
SomeUnion: {
__resolveType: (parent) => { ... },
}
}
resolveType
函数应始终返回与模式中现有对象类型名称匹配的字符串。
如果您使用__isTypeOf
而不是__resolveType
,则外观会有所不同,因为isTypeOf
函数与特定的对象类型而不是接口或联合相关联。 This is all shown in the docs。因此,解析器映射如下所示:
const resolvers = {
SomeType: {
someField: (parent, args, context, info) => { ... },
__isTypeOf: (parent) => { ... },
},
}
__isTypeOf
应该始终返回true
或false
,这取决于传入的对象实际上是否是该类型。
您只需要使用__resolveType
或__isTypeOf
。如果使用__isTypeOf
,则必须将其添加到联合或接口中的每种可能的对象类型中。