GraphQL如何定义支持字符串数字混合的矩阵类型schema?
GraphQL原生没有内置的Any泛型类型,不过有两种成熟的方案可以解决你的类型转换问题,无需前端额外做类型遍历转换:
方案1:使用JSON自定义标量(最便捷)
绝大多数GraphQL服务端实现都支持自定义标量,你可以直接引入现成的JSON标量,该标量会保留数据的原始JS类型,不会做强制类型转换。
修改后的schema如下:
# 首先声明JSON自定义标量 scalar JSON type MyType { data: JSON }
这个方案支持任意长度、任意混合类型的矩阵结构,完全适配Google GeoChart的动态数据要求。
方案2:自定义StringOrNumber标量(更严格)
如果你需要限制数组元素只能是字符串或数字,避免返回其他非法类型,可以自定义StringOrNumber标量,在服务端实现对应的序列化逻辑,判断值类型返回对应的字符串/数字即可。
修改后的schema如下:
# 声明字符串/数字联合自定义标量 scalar StringOrNumber type MyType { data: [[StringOrNumber]] }
注意事项
两种方案都需要在服务端注册对应自定义标量的实现,目前主流的GraphQL框架(比如Apollo Server、GraphQL.js)都提供了现成的JSON、自定义标量实现,直接导入即可使用,无需手动编写序列化/反序列化逻辑。
内容的提问来源于stack exchange,提问作者J.F.
相关产品推荐
相关产品推荐

