我正在努力使用我的GraphQL API,因为我需要利用Enums,同时在前端保留完整的描述。
简而言之:我对产品有不同的状态:"Has been sent"
,"Not sent yet"
,"Received"
。所以这是使用Enums的正确位置:
enum ProductState {
HAS_BEEN_SENT
NOT_SENT_YET
RECEIVED
}
但是我需要在前端显示正确的字符串(“Has been sent
”,而不是“HAS_BEEN_SENT
”)。
我不能使用一个简单的解决方案作为“用空格替换下划线和小写字符串”因为我的API不是英文而是法文(因此我有重音和特殊字符)。
Enum不能返回一个字符串吗?还是一个对象?我试过指令,但不可能让它工作......
实际上我并不关心它是如何在数据库(大写或小写形式)中写入的,也不是在GraphQL API中。我只需要我的客户以“法语”形式访问不同的产品状态。
据我所知,在GRAPHQL中只有一种支持的语法用于定义枚举,这是您正在使用的语法。您无法将枚举与字符串值相关联。
#NOTE: I would probably use a more descriptive name as opposed to ProductState
enum AllowedProductStatus {
HAS_BEEN_SENT
NOT_SENT_YET
RECEIVED
}
但是,如果使用apollo服务器,则可以使用解析器添加自定义值。
const resolvers = {
AllowedProductStatus: {
HAS_BEEN_SENT: "Has been sent",
NOT_SENT_YET: "Not sent yet",
RECEIVED: "Received"
}
};
或者,如果您只想使其独特,您也可以使用指令@unique
type Product {
status: String! @unique
}
希望它有所帮助。