2. 枚举类型
5m

概述

Odyssey Lift-off 系列中,我们学习了如何编写模式,其中包含,返回

使用类型,如IntString可能会有很多可能的值。但有时,您希望将字段的返回值限制为几个选项。这就像使用下拉选择器并从预先验证的值列表中进行选择,而不是使用空的文本输入并输入想到的任何内容一样!

这就是enum类型的用武之地!

在本课中,我们将

  • 了解什么是枚举,以及如何在中定义枚举
  • 查看枚举在 Airlock 代码库中如何使用的示例

什么是enum

一个枚举类型,它表示一个预定义的可能值列表。

例如,在 Airlock 中,房源可以是某一特定类型的地址:一艘宇宙飞船、一栋住宅、一个露营地、一间公寓或一个房间。我们在模式中通过 locationType 表示这一点。

利用我们迄今所了解的内容,我们可以 定义 locationType String。但是,我们可能会遇到数据一致性问题。例如,如果一位用户在输入“spaceship”(太空飞船)时不小心输成了“space ship”,会发生什么情况?如果他们输入的值不是一个有效的地址类型,比如“narwhal”(独角鲸)或“pickle chips”(腌菜脆片)又会发生什么情况?我们在过滤或整理房源时可能会遇到不必要的复杂情况。

为了保持数据的整洁一致,将 locationType 的可能值限定为更少的一组值会很有帮助。我们通过一个枚举在模式中定义此约束。

定义 enum

要定义枚举,我们以 enum关键字开头,接着是使用帕斯卡命名法表示的枚举名称,然后是花括号 ({})。在花括号中,我们添加可能值的列表。根据约定,这些值均以大写表示。

以下是如何为 Airlock 中可能的地址类型定义枚举的示例

server/schema.graphql
enum LocationType {
SPACESHIP
HOUSE
CAMPSITE
APARTMENT
ROOM
}

使用 enum

一旦枚举定义完毕,我们可以将其用作 的返回类型,使用方式与处理其他任何 相同。

以下是 LocationType枚举如何用于 Listing类型的 locationType 的示例:

server/schema.graphql
type Listing {
# ...
"The location type of the listing"
locationType: LocationType!
# ...
}

这意味着,当我们对特定列表的 locationType,它将返回在 LocationType 枚举中列出的某个选项。

query GetListingType {
listing(id: "listing-1") {
locationType # returns CAMPSITE
}
}

在 Airlock 代码库中查看

Airlock 架构中定义了多个枚举。在 server/schema.graphql 文件中查看它们。

  • 你对架构中现有的枚举有什么发现?
  • 还有哪些 可能是返回枚举的候选字段?那个枚举可能有哪些值?

练习

代码挑战!

在下面的架构定义中,定义一个新枚举,称为 OrderStatus,其可能的值为:SUBMITTEDCONFIRMEDSHIPPEDDELIVEREDCANCELLED。然后向 Order 类型添加一个名为 orderStatus 的新字段,并使其解析为新枚举中的(非空)值。

要点

  • 一个 enum 类型在我们的 中定义了一个预设的选项列表。
  • 枚举用于保持数据值的统一。

接下来

在下一课中,我们将了解 input 类型:用于保持架构一致的另一工具。

上一个