为了账号安全,请及时绑定邮箱和手机立即绑定

GraphQL Blackbox /“任何”类型?

GraphQL Blackbox /“任何”类型?

慕尼黑8549860 2019-10-21 11:17:52
是否可以指定GraphQL中的字段应为黑盒,类似于Flow如何具有“ any”类型?我在架构中有一个字段,该字段应该能够接受任意值,可以是String,Boolean,Object,Array等。
查看完整描述

3 回答

?
慕村9548890

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!

}


查看完整回答
反对 回复 2019-10-21
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 412 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号