graphql对象类型中的动态字段

时间:2017-10-26 02:24:47

标签: graphql graphql-js

我有一些GraphQL类型:

const Atype = new GraphQLObjectType({
  name: 'Atype',
  fields: {
    data: { type: ADataType },
    error: { type: GraphQLString },
  }
})

const Btype = new GraphQLObjectType({
  name: 'Btype',
  fields: {
    data: { type: BDataType },
    error: { type: GraphQLString },
  }
})

它看起来多余,因为只有data个字段不同......

如何在GraphQL中以更优雅的方式解决它?

1 个答案:

答案 0 :(得分:0)

我创建了一个名为混合的新类型,只是为了解决类似的问题。,混合使用mongoose混合类型,如果你熟悉它。

创建一个名为GraphQLMixed.js的新文件,或者将其命名为任意名称,并将此代码放入其中。

import { GraphQLScalarType } from 'graphql';

const GraphQLMixed = new GraphQLScalarType({
  name: 'Mixed',
  serialize: value => value,
  parseValue: value => value,
  parseLiteral: ast => ast.value
});

export default GraphQLMixed;

现在,根据您的语法,我假设您正在使用 express-graphql ,因此,无论您想要使用此类型,请执行此操作

const GraphQLMixed = require('path/to/file/GraphQLMixed');

const Atype = new GraphQLObjectType({
  name: 'Atype',
  fields: {
    data: { type: GraphQLMixed },
    error: { type: GraphQLString },
  }
})

const Btype = new GraphQLObjectType({
  name: 'Btype',
  fields: {
    data: { type: GraphQLMixed },
    error: { type: GraphQLString },
  }
})

希望这有效并有所帮助。