我们在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实际上映射到“超级用户”的所有假设。
问候
史蒂夫