【发布时间】:2020-10-21 13:11:36
【问题描述】:
我刚刚为 Node 制作了一个简单的标量类型/包,graphql-scalar-json5。
在我看来工作正常
但我有一个问题
似乎使用它绕过了类型检查而不是使用输入类型?
这让我觉得我可能做错了什么。
当您收到错误时,在解决时,如果该值无效。
GraphiQL 中没有警告
我不确定这是否是 GraphQL 中自定义标量类型的限制。 或 GraphiQL 实现细节
在第一印象中,如果 JSON5(或 JSON)值有效地从 String 类型派生,但我从未告诉过 'GraphQL' 这件事,而且似乎不是这样做的方式,这是有道理的。 .
工具如何知道参数类型错误?
从graphql-scalars获取另一个自定义标量EmailAddress
使用以下查询定义
echoMail(email: EmailAddress): EmailAddress
同样,类型检查仅在运行时/解析器时发生,因为它需要由解析器解析,以进行验证。
有没有更好的方法来做到这一点?
举个例子,给定如下实现
class MyScalar {
constructor(value) {
this.value = value;
}
toString() {
return this.value;
}
static from(value) {
if (typeof value !== "string")
throw new Error(`Expected 'String' but got '${typeof value}'`);
return new MyScalar(value);
}
}
new GraphQLScalarType({
name: "MyScalar",
serialize: (x) => x.toString(),
parseValue: MyScalar.from,
parseLiteral: (ast, variables) =>
Kind.VARIABLE
? (variables && MyScalar.from(variables[ast.name.value])) || undefined
: MyScalar.from(ast.value),
});
你会如何改进它?
在哪里验证值有什么不同吗?
在serialize、parseValue、on parseLiteral 上?
还有什么要“实施”的吗?
谢谢
【问题讨论】:
标签: node.js graphql graphql-js