不能表示非枚举值

Posted

技术标签:

【中文标题】不能表示非枚举值【英文标题】:Cannot represent non-enum value 【发布时间】:2020-11-10 14:15:54 【问题描述】:

在我的 graphQL API(带有 typescript 和 type-graphql)中,我正在尝试运行一个 inputType 具有 enum 的突变strong> 值定义如下

export enum GenderType 
  female = 'female',
  male = 'male',


registerEnumType(GenderType, 
  name: 'GenderType',
);

我正在尝试执行这个突变。

mutation 
  registerStudent(data: 
    name: "John",
    gender: "male",
  ) 
    id
  

但是当我尝试执行突变时,它给出了一个错误提示

"message": "Enum "GenderType" :"female"。你的意思是枚举值 "female" 还是 "male"?",

我认为这是因为我如何在 type-graphql 中使用 registerEnumType 定义枚举类型。

如何玷污enum with type-graphql

【问题讨论】:

发现问题...实际上问题位于我通过的突变对象类型。首先我传递了性别:“男性”,但它是一个枚举,所以它有自己的值。然后我尝试了性别:男性它起作用了。把它作为男性传递,没有“男性”⚡ 您可以回答自己的问题并将其标记为已接受。这样你就可以帮助其他有同样问题的人,并清楚地表明这个问题有答案。 【参考方案1】:

?找到问题了...

实际上问题在于我通过的突变对象数据。

首先,我将导致问题的性别类型作为 String 传递。

mutation 
  registerStudent(data: 
    name: "John",
    gender: "male",
  ) 
    id
  

这是错误的,因为它是一个字符串,程序需要一个我们在枚举中定义的值,因此请按原样传递枚举值。

mutation 
  registerStudent(data: 
    name: "John",
    gender: male,
  ) 
    id
  

【讨论】:

以上是关于不能表示非枚举值的主要内容,如果未能解决你的问题,请参考以下文章

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

枚举类型

使用 `import type` 声明导入时,TypeScript 枚举不能用作值

PHP:带有值的枚举[重复]

协议类型“Encodable”的值不能符合“Encodable”;只有结构/枚举/类类型可以符合协议

枚举三部曲之一