在运行带有输入参数(不仅是Ints)的查询时,我遇到了一种新型的荒谬错误(Expected type Int, found Int
)。自6月初以来(我升级到graphql@14.3.1
以来,它们似乎已经出现了)
我们的设置有所不同,因为我们将远程模式缝合到了本地模式(当它们存在时重叠类型,或者当它们不存在时添加它们)。
有人见过这种类型的错误,知道如何纠正吗?
我已将问题追溯到scalar.js文件的parseLiteral方法。在当前情况下,ast.kind等于EnumValue
,而其值是IntValue
var GraphQLInt = new _definition.GraphQLScalarType({
name: 'Int',
description: '...',
serialize: serializeInt,
parseValue: coerceInt,
parseLiteral: function parseLiteral(ast) {
if (ast.kind === _kinds.Kind.INT) {
var num = parseInt(ast.value, 10);
if (num <= MAX_INT && num >= MIN_INT) {
return num;
}
}
return undefined;
}
});
似乎解析器将10
的值任意转换为EnumValue
类型的Int
而不是IntValue
。
这是一个典型的查询
combinedStatus(status: "bad", start:10, end:20) {
status
timestamp
}
我收到以下错误:GraphQLError: Expected type Int, found Int.
在isValidScalar上。/node_modules/graphql/validation/rules/ValuesOfCorrectType.js:180:27
相同的带有变量的查询将返回预期结果,并且没有错误:
combinedStatus(status: "bad", start:$start, end:$end) {
status
timestamp
}
架构为:
type CdsHealthCheckLocal implements CdsHealthCheckInterface {
status: String!
combinedStatus(status: String, start: Int, end: Int): CdsHealthCheck
}
,相应的解析器为:
async (parent, { status, start, end }, context) => {
return {
status: `not sure if I am feeling ${status} (${start}, ${end})`
}}