在GraphQL模式中,字段如何可以是GraphQLString和GraphQLInt?

在GraphQL模式中,字段如何可以是GraphQLString和GraphQLInt?,graphql,relayjs,relay,graphql-js,Graphql,Relayjs,Relay,Graphql Js,以下是我在GraphQL模式的express应用程序中的代码:- let data = new GraphQLObjectType({ name:"Data", fields: { id: {type: GraphQLID}, value: {type: GraphQLString} // TODO: allow for string as well as int } }); 如何使“value”字段接受字符串值和int值,以便使用正确的

以下是我在GraphQL模式的express应用程序中的代码:-

let data = new GraphQLObjectType({
    name:"Data",
    fields: {
        id: {type: GraphQLID},
        value: {type: GraphQLString} // TODO: allow for string as well as int
    }
});
如何使“value”字段接受字符串值和int值,以便使用正确的类型进行存储?

编辑: 此解决方案对该问题无效。它仅适用于对象类型,不适用于标量

您应该查看
图形类型

我不习惯这样定义类型,但我希望它是如下所示:

var ValueType = new GraphQLUnionType({
  name: 'Value',
  types: [ GraphQLString, GraphQLInt ],
  resolveType(value) {
    if (value instanceof string) {
      return GraphQLString;
    }
    if (value instanceof number) {
      return GraphQLInt;
    }
  }
});

let data = new GraphQLObjectType({
    name:"Data",
    fields: {
        id: {type: GraphQLID},
        value: {type: ValueType}
    }
});

根据您的评论,您使用的NoSQL数据库可以将字符串和int放在同一字段中,您应该使用
GraphQLString
。在创建上述对象的新实例时,您可以为
字段创建
resolve
方法,该方法将检查传递的值是
string
还是
int
(当然,由于
GraphQLString
类型,它将始终是string,但它可以是类似
“123”的字符串)
可以解析为int)-根据这一点,您可以在保存到数据库之前执行一些解析。 另一方面,当您从数据库检索数据时,它将始终作为graphql表示中的
字符串出现-如果不是这种情况,我认为这可能是一个简单的解决方案


然而,如果您对这个命题不满意,恐怕您无法随心所欲地欺骗GraphQL。每个字段只能获得单个类型定义。

好,如果您创建了值<代码>整数< /代码>以及<代码>字符串< /代码>,那么您会考虑什么类型?database@p0k8_GraphQL的要点是隐藏数据库细节。该值是否来自数据库A或B或某个文件或其他API并不重要。因此,让union typesgraphql提供
int
是完全有效的,但是该类型的数据库模式是
string
,那么它是一个可以直接存储json对象的nosql数据库。因此,字符串将另存为字符串,int将另存为int。
UnionType
只能有对象类型,不能包含
string
int
之类的类型。我错过了其中的非标量部分。我看到了这个关于用例的问题:我认为这个答案获得一个向上投票是误导性的,因为它不适用于这个用例。我请求将其再次设置为0。我还没有足够的声誉来做出这一改变。我同意@NikhilAgarwal的支持票。这不是完整的意思。