如何为 GraphQLString 类型创建别名?
How to create an alias for a GraphQLString type?
在某些语言中,您可以将字符串等基本类型重命名为其他名称:
type alias UUID = String
它仍然是一个字符串类型,但是现在你可以更好地推理代码了。因为不是宇宙中的所有字符串.. 只是字符串的 UUID 形状。而且您可以更快地发现错误。
我尝试在 graphql 中做同样的事情,但它不起作用:
function UUID (){
return new GraphQLScalarType({
name: 'UUID',
serialize: uidAsString => { return uidAsString },
parseValue: uidAsString => { return uidAsString },
parseLiteral(ast) {
console.log(ast) // log below
if (ast.kind === Kind.GraphQLString) {
return ast.value;
}
return null;
}
});
}
错误是:
{
"errors": [
{
"message": "Expected type UUID!, found \"what?\"; Kind is not defined",
"locations": [
{
"line": 2,
"column": 30
}
]
}
]
}
当 console.log ast
我看到这个:
{
kind: 'StringValue',
value: 'what?',
block: false,
loc: { start: 41, end: 48 }
}
那么我应该在这里输入什么代码?
我不完全理解我应该做什么 return .. 显然 ast.value
是不正确的。
甚至可以为 string
、int
、其他 enums
等基本类型创建别名吗?对象已经正确(特别)命名 - 我发现自己不需要经常重命名它们。
首先,日志在我看来是正确的。您需要区分 AST 值(它只有几种值类型)和值的类型。所以在你的情况下,AST 值是字符串类型,你的标量应该只读取字符串,所以一切都很好!
其次,我不认为这行是正确的:ast.kind === Kind.GraphQLString
。根据我从 source code.
的理解应该是 ast.kind === Kind.STRING
第三,您将标量放入函数而不是简单地将其分配给变量是否有原因?标量通常被直接引用。在这里,当您在代码中使用 UUID()
时,您一直在创建标量的新实例...
const UUID = new GraphQLScalarType({
您可能还想在字符串级别使用更多验证,否则我只是建议使用内置的 ID
标量。
在某些语言中,您可以将字符串等基本类型重命名为其他名称:
type alias UUID = String
它仍然是一个字符串类型,但是现在你可以更好地推理代码了。因为不是宇宙中的所有字符串.. 只是字符串的 UUID 形状。而且您可以更快地发现错误。
我尝试在 graphql 中做同样的事情,但它不起作用:
function UUID (){
return new GraphQLScalarType({
name: 'UUID',
serialize: uidAsString => { return uidAsString },
parseValue: uidAsString => { return uidAsString },
parseLiteral(ast) {
console.log(ast) // log below
if (ast.kind === Kind.GraphQLString) {
return ast.value;
}
return null;
}
});
}
错误是:
{
"errors": [
{
"message": "Expected type UUID!, found \"what?\"; Kind is not defined",
"locations": [
{
"line": 2,
"column": 30
}
]
}
]
}
当 console.log ast
我看到这个:
{
kind: 'StringValue',
value: 'what?',
block: false,
loc: { start: 41, end: 48 }
}
那么我应该在这里输入什么代码?
我不完全理解我应该做什么 return .. 显然 ast.value
是不正确的。
甚至可以为 string
、int
、其他 enums
等基本类型创建别名吗?对象已经正确(特别)命名 - 我发现自己不需要经常重命名它们。
首先,日志在我看来是正确的。您需要区分 AST 值(它只有几种值类型)和值的类型。所以在你的情况下,AST 值是字符串类型,你的标量应该只读取字符串,所以一切都很好!
其次,我不认为这行是正确的:ast.kind === Kind.GraphQLString
。根据我从 source code.
ast.kind === Kind.STRING
第三,您将标量放入函数而不是简单地将其分配给变量是否有原因?标量通常被直接引用。在这里,当您在代码中使用 UUID()
时,您一直在创建标量的新实例...
const UUID = new GraphQLScalarType({
您可能还想在字符串级别使用更多验证,否则我只是建议使用内置的 ID
标量。