这是来自GraphQL架构的快速应用程序的代码: -
let data = new GraphQLObjectType({
name:"Data",
fields: {
id: {type: GraphQLID},
value: {type: GraphQLString} // TODO: allow for string as well as int
}
});
我怎样才能做出价值'字段接受字符串值以及int值,以便可以使用正确的类型存储它?
答案 0 :(得分:1)
根据您的评论说您使用的NoSQL数据库可以将字符串和整数放在同一个字段中,您应该使用GraphQLString
。在创建上述对象的新实例时,您可以为resolve
字段创建value
方法,该方法将检查传递的值是string
还是int
(当然它总是因为GraphQLString
类型是字符串,但它可以是像"123"
这样的字符串,可以解析为int) - 据此,您可以在保存到数据库之前执行一些解析。
另一方面,当您从数据库中检索数据时,它将始终作为图形表示中的string
出现 - 如果不是这种情况,我认为这可能是一个简单的解决方案。
但是,如果你对这个命题不满意,我恐怕你不能按照你的想法欺骗GraphQL。每个字段只能获得单一类型的定义。
答案 1 :(得分:0)
修改: 此解决方案对此问题无效。它仅适用于对象类型而非标量
您应该查看GraphQLUnionType
:http://graphql.org/graphql-js/type/#graphqluniontype
我不习惯定义这样的类型,但我希望它类似于下面的内容:
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}
}
});