枚举可以在 GraphQL 中返回描述(字符串)吗?

Que*_*n D 4 graphql graphql-js

我正在为我的 GraphQL API 苦苦挣扎,因为我需要利用 Enums,同时在前端保留它们的完整描述。

简而言之:我对产品有不同的状态:"Has been sent", "Not sent yet", "Received"。所以这是使用枚举的正确位置:

enum ProductState {
  HAS_BEEN_SENT
  NOT_SENT_YET
  RECEIVED
}
Run Code Online (Sandbox Code Playgroud)

但是我需要在前端显示正确的字符串(“ Has been sent”,而不是“ HAS_BEEN_SENT”)。

我不能使用简单的解决方案作为“用空格替换下划线并将字符串小写”,因为我的 API 不是英语而是法语(所以我有重音和特殊字符)。

枚举不能返回字符串吗?还是对象? 我尝试使用指令但无法让它工作......

实际上,我不在乎它是如何写入数据库(大写或小写形式)或 GraphQL API 中的。我只需要我的客户以“法语”形式访问不同的产品状态。

Lew*_*wix 5

据我所知,在 GRAPHQL 中定义枚举只有一种受支持的语法,这就是您正在使用的一种。您不能将枚举与字符串值相关联。

#NOTE: I would probably use a more descriptive name as opposed to ProductState
enum AllowedProductStatus { 
  HAS_BEEN_SENT
  NOT_SENT_YET
  RECEIVED
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用 apollo 服务器,您可以使用解析器来添加自定义值。

const resolvers = {
  AllowedProductStatus: {
    HAS_BEEN_SENT: "Has been sent", 
    NOT_SENT_YET: "Not sent yet", 
    RECEIVED: "Received"
  }
};
Run Code Online (Sandbox Code Playgroud)

或者,如果您只是想让它独一无二,您也可以使用指令 @unique

type Product {
  status: String! @unique
}

Run Code Online (Sandbox Code Playgroud)

希望它有帮助。