枚举 $EnumName 不能表示非枚举值:“$EnumValue”。您的意思是枚举值“$EnumValue”吗

Posted

技术标签:

【中文标题】枚举 $EnumName 不能表示非枚举值:“$EnumValue”。您的意思是枚举值“$EnumValue”吗【英文标题】:Enum $EnumName cannot represent non-enum value: "$EnumValue". Did you mean the enum value "$EnumValue" 【发布时间】:2020-11-11 09:17:57 【问题描述】:

我正在尝试在解析器上为我的玩具 GraphQL API 创建一个可选过滤器,它使用type-graphql@1.0.0-rc.3class-validator@0.12.0。当我运行看似矛盾的查询时,我收到此错误消息。我非常密切地关注documentation 中的枚举示例,但我确定我遗漏了一些东西。

这里是查询:


  authors(
    field: "name",
    op: "CONTAINS",
    value: "Jones"
  ) 
    id,
    name
  

结果:


  "error": 
    "errors": [
      
        "message": "Enum \"FilterType\" cannot represent non-enum value: \"CONTAINS\". Did you mean the enum value \"CONTAINS\"?"
      
    ]
  

还有枚举

enum FilterType 
    EQ = "=",
    // . . .
    CONTAINS = "CONTAINS",
    IN = "in"


registerEnumType(FilterType, 
    name: "FilterType",
    description: "Type of comparison operation to perform during the filter",
);

export 
    FilterType

还有我的解析器/ArgsType。


@ArgsType()
class FilterAuthorArgs 
    @Field(() => String, nullable: true)
    field?: string;

    @Field(() => FilterType, nullable: true)
    op?: FilterType;

    @Field(() => String, nullable: true)
    value?: string;

    // . . .

    get _field(): string|undefined 
        this.validate();
        return this.field
    

    get _op(): FilterType|undefined 
        this.validate();
        return this.op
    

    get _value(): string|undefined 
        this.validate();
        return this.value
    


@Resolver()
export class AuthorResolver 
    @Query(()=> [Author])
    authors(@Args() _field, _op, _value: FilterAuthorArgs) 
        // use filters
        return authors;
    

【问题讨论】:

【参考方案1】:

GraphQL 中的双引号表示字符串文字。如果您的查询采用枚举值,则应省略引号:


  authors(
    field: "name",
    op: CONTAINS,
    value: "Jones"
  ) 
    id,
    name
  

【讨论】:

以上是关于枚举 $EnumName 不能表示非枚举值:“$EnumValue”。您的意思是枚举值“$EnumValue”吗的主要内容,如果未能解决你的问题,请参考以下文章

ID3 Java 枚举树

nhibernate 映射枚举对(键 - 值)

C#通过反射进行枚举描述相关操作

第九节——枚举类型,视图与索引

dart 中的 json_serializable 枚举值

如何比较 TypeScript 中的枚举