3 回答

TA贡献1884条经验 获得超4个赞
我选择了一个更紧凑的解决方案:
const { GraphQLScalarType } = require('graphql')
const { Kind } = require('graphql/language')
const ObjectScalarType = new GraphQLScalarType({
name: 'Object',
description: 'Arbitrary object',
parseValue: (value) => {
return typeof value === 'object' ? value
: typeof value === 'string' ? JSON.parse(value)
: null
},
serialize: (value) => {
return typeof value === 'object' ? value
: typeof value === 'string' ? JSON.parse(value)
: null
},
parseLiteral: (ast) => {
switch (ast.kind) {
case Kind.STRING: return JSON.parse(ast.value)
case Kind.OBJECT: throw new Error(`Not sure what to do with OBJECT for ObjectScalarType`)
default: return null
}
}
})
然后我的解析器看起来像:
{
Object: ObjectScalarType,
RootQuery: ...
RootMutation: ...
}
和我的.gql样子:
scalar Object
type Foo {
id: ID!
values: Object!
}

TA贡献1796条经验 获得超4个赞
我提出了一个中间立场的解决方案。我没有尝试将这种复杂性推到GraphQL上,而是选择仅使用String
类型并JSON.stringify
在将其设置为字段之前对数据进行查询。所以一切都变得字符串化了,后来在我的应用程序中,当我需要使用此字段时,我JSON.parse
得到的结果是返回所需的对象/数组/布尔值/等。
添加回答
举报