【发布时间】:2019-01-07 07:26:26
【问题描述】:
我们在 SDL 中定义了一堆枚举类型,它们非常适合查询和突变。 在解析器部分,这些被映射到代表后端枚举的字符串。
例如在 SDL 中我们有:
enum WRRole {
USER
PROVIDER
SUPPORT
ADMIN
SUPER_ADMIN
GUEST
}
在解析器部分我们有:
WRRole: {
USER: 'user',
PROVIDER: 'provider',
SUPPORT: 'support',
ADMIN: 'admin',
SUPER_ADMIN: 'super admin',
GUEST: 'guest'
},
解析器使用 Mongoose 匹配 nodejs 后端中定义的枚举值,其中字段定义为:
...
roles: {
type: [
{
type: String,
enum: ['user', 'provider', 'support', 'admin', 'super admin', 'guest']
}
],
default: ['user']
},
...
我们对 GraphQL 枚举的问题是我们无法自省枚举并使用 GraphQL 自省取回映射......
这会导致构建 UI 时出现问题,我们希望在其中向用户显示这些选项的下拉列表。 SDL 枚举值(例如 SUPER_USER)非常适合键,但我们希望显示实际的后端映射值以供选择使用。
这只是我们拥有的众多枚举中的一个示例。许多映射值由多个单词组成,这些单词之间有空格或包含 SDL 枚举值中不允许的字符的单词,例如本例中的“super admin”。
所以我的问题是......你们如何处理这样的事情而不必重复自己或在前端添加更多代码以将这些映射到更有用的有意义的名称以进行演示????
不能保证顺序与后端枚举的定义顺序相匹配,因此添加到后端模型枚举会严重破坏 SUPER_USER 实际映射到“超级用户”的任何假设,即使解析器知道这一点。
问候
史蒂夫
【问题讨论】:
标签: enums graphql graphql-js