在 GraphQL 中,Enum 类型是一种非常强大的数据类型,可以定义一组可选的值,这些值适用于某些特定时刻的操作,如过滤、排序等。本文将为您详细介绍 GraphQL 中的 Enum 类型及其用法。
枚举类型及其优缺点
首先,让我们来看一下什么是枚举类型。枚举类型是一种固定的列表,其中每个值都属于该列表。相比起字符串或者数字,枚举类型可以提供更为严格的类型检查和更好的代码提示。在 GraphQL 中,枚举类型需要在 Schema 中定义。
枚举类型的优点:
- 增加代码的可读性,提高代码的可维护性。
- 枚举类型是一种安全的数据类型,可以避免代码中出现未定义的变量值。
- 在 GraphQL 中,枚举类型也能够提供更好的代码提示和自动完成。
枚举类型的缺点:
- 如果有大量的枚举值,枚举类型的定义会变得过于冗长。
- 如果您要添加新的枚举值,您需要修改已有的代码,因为每个客户端都需要重新使用该模式。
因此,在使用枚举类型时,我们需要根据具体场景选择是否使用枚举。
如何使用 Enum 类型
在 GraphQL 中定义 Enum 类型需要使用 enum
关键字,如下所示:
enum CatKind { HOUSE_CAT STRAY_CAT FERAL_CAT }
上面的定义定义了一个名为 CatKind
的枚举类型,它包含三种值:HOUSE_CAT
、STRAY_CAT
和 FERAL_CAT
。在 GraphQL 中,我们可以用它来过滤某些数据,例如:
{ cats(where: { kind: HOUSE_CAT } ) { name age } }
上面的查询将会返回所有 kind
属性为 HOUSE_CAT
的猫儿。
在服务器端的代码中,你可以使用各种语言定义枚举类型。例如,使用 TypeScript 定义后端的枚举类型如下:
enum CatKind { HouseCat = 'HOUSE_CAT', StrayCat = 'STRAY_CAT', FeralCat = 'FERAL_CAT', }
在 TypeScript 中,枚举类型和普通类型非常类似。它能够被枚举和 union 类型所使用。
枚举类型的应用场景
枚举类型主要用于以下两个场景:
控制输入
枚举类型可以用来指定 GraphQL 操作的参数。这可以确保输入的值不会超出您想要的范围,同时可以提供正确的类型检查和代码提示。
以下是一个使用 enum
的示例:
-- -------------------- ---- ------- ---- ------- - ------- ------ ---- - ---- ------ - -------- -------- ------ ---- ----------- ------ -
在上面的示例中,枚举类型 Episode
作为 Review
类型的一部分,用于控制 episode
参数。这确保了使用端只能传入 NEWHOPE
、EMPIRE
或 JEDI
其中之一。
mutation { createReview(episode: NEWHOPE, stars: 5, commentary: "A masterpiece!") { stars commentary } }
控制输出
枚举类型可用于将 API 的输出归类并用于 UI 等其他操作,例如,构建过滤器或选择器。
以下是一个使用 enum
的示例:
-- -------------------- ---- ------- ---- ---- - ----- ------ ----- - ---- ----- - ----- ----- ------ ------- ------ ---- -
在上面的示例中,枚举类型 Size
作为 Shirt
类型的一部分,用于分类 shirts
的大小。因此,调用端能够使用该字段构建过滤器。
{ shirts(where: { size: "SMALL" }) { color price } }
总结
GraphQL 中的 Enum 类型可以帮助我们定义一组可选的值,可用于特定时刻的操作,如过滤、排序等。它可以增加代码的可读性,提高代码的可维护性。枚举类型在定义上需要谨慎,同时也可以被用于控制输入和输出。我们需要在具体场景下,综合考虑使用枚举类型的优缺点,选择何时使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64638c9f968c7c53b0495f71