如何在 GraphQL 中为键值定义枚举

Posted

技术标签:

【中文标题】如何在 GraphQL 中为键值定义枚举【英文标题】:How to define enums for key values in GraphQL 【发布时间】:2019-10-19 10:27:53 【问题描述】:

如何在 GraphQL 架构中定义枚举键? 我期待的响应如下所示

 businessByState:  
   MO: ["VALUE1", "VALUE2"],
   CA: ["VALUE1", "VALUE3", "VALUE4]
 

我知道我可以为状态值定义枚举,但仍然想知道如何定义枚举以使键值只有 2 个字母的状态缩写?

【问题讨论】:

【参考方案1】:

在 GraphQL 中,必须显式定义 Object 类型的每个字段。例如:

type BusinessByState 
  AL: [String!]!
  AK: [String!]!
  AZ: [String!]!
  # and so on...

没有语法可用于基于某些输入(如现有枚举)定义具有相同类型的多个字段。

如果你的 typeDefs 只是一个字符串,你可以使用字符串模板来节省一些输入,假设你有某种状态缩写数组:

const states = ['AL', 'AK', 'AZ', /** and so on **/]
const typeDefs = `
  enum STATES 
    $states.join('\n')
  

  type BusinessByState 
    $states.map(state => `$state: [String!]!`).join('\n')
  
`

【讨论】:

以上是关于如何在 GraphQL 中为键值定义枚举的主要内容,如果未能解决你的问题,请参考以下文章

C# 给枚举定义DescriptionAttribute,把枚举转换为键值对

如何在类型定义中为 GraphQL 字段定义数组数据类型

什么是在XNA框架枚举中为键调用的'@'符号?

如何在我的 GraphQL 中为对象中的对象列表定义类型

如何在 GraphQL 模式中定义嵌套枚举类型

如何在php中将对象数组转换为键值对