npm 包 type-graphql 使用教程

阅读时长 6 分钟读完

在前端开发中,GraphQL 已经成为了一个流行的后端 API 查询语言。它可以根据客户端的需求提供灵活的数据查询,减少不必要的网络流量。然而,在前端开发中,使用 GraphQL 的难点往往在于构建 GraphQL 的类型和解析器。这时候,npm 包 type-graphql 就可以派上用场了。

type-graphql 简介

type-graphql 是一个针对 TypeScript 类型系统的 GraphQL 框架。它提供了可以根据 TypeScript 类定义自动生成的 GraphQL 类型定义和解析器。这使得我们可以在无需自己手工构建 GraphQL 类型和解析器的情况下,快速地搭建 GraphQL API。

在 type-graphql 中,我们可以使用很多装饰器来定义 GraphQL 类型和字段。比如,ObjectType 装饰器用于定义 GraphQL 对象类型。Field 装饰器用于定义 GraphQL 对象类型的字段。以及,其他与输入类型、枚举类型和接口类型相关的装饰器。

安装和基本使用

要使用 type-graphql,我们需要在项目中安装它:

然后,我们需要在 tsconfig.json 中开启 experimentalDecoratorsemitDecoratorMetadata

现在,我们就可以定义类型和解析器了。以下是一个示例:

-- -------------------- ---- -------
------ -------------------
------ - ----------- ------ ----- - ---- ---------------

-------------
----- ----- -
  --------
  -------- ------ - ------- ----------
-

----- ------------- -
  --------- -- ------
  ----- -------- -------------- -
    ------ --- --------
  -
-

在这个示例中,我们定义了一个 GraphQL 对象类型 Hello,它只有一个字段 message。然后,我们又定义了一个解析器 HelloResolver,它有一个查询方法 hello,它返回一个 Hello 类型的对象。

更进一步

上面的示例只是 type-graphql 的一个很小的部分。type-graphql 还提供了许多高级功能和开箱即用的功能,它们可以大大简化我们的代码。

例如,我们可以使用 @FieldResolver 装饰器定义字段解析器。我们还可以使用 @Mutation 装饰器定义 GraphQL 的变更。还有,我们可以使用 @InterfaceType 装饰器定义 GraphQL 接口类型。这里,让我们看一个稍微复杂一些的示例:

-- -------------------- ---- -------
------ -------------------
------ - ----------- ------ ------ --------- -------------- ----- --------- ---------- ---- ---- ------------- - ---- ---------------

-------------
----------------
-------- ----- ------ -
  --------
  --- -------

  --------
  ----- -------

  --------
  ---- -------
-

------------- ----------- ------ --
----- -------- ---------- ------ -
  --- -------

  --------
  ----- -------

  --------
  ---- -------

  --------
  ------- ---------

  -------- --------- ---- --
  --------- -------
-

------------
----- ------------- -
  --------
  ----- -------

  --------
  ---- -------

  --------- -- ---------
  ------- ---------

  -------- --------- ---- --
  --------- -------
-

----- ---------- ---------- - ---

------------ -- -------
----- -------------- -
  --------- -- ---------
  ----- ---------- ----------------- -
    ------ ----------
  -

  --------- -- -------
  ----- ----------------- -- -- ---- --- -------- -------------- - ---------- -
    ------ ---------------- -- ------------ --- ----
  -

  ------------ -- -------
  ----- ------------------------ ----- --------------- ----------------- -
    ----- -------- - ----------------- ----------- - --- ---------------- - -- ------- ---
    -------------------------
    ------ ---------
  -

  ----------------- -- ---------
  ----- --------------------- ------- -------- -------------- --------- -
    -- --------- -- ------- -
      ------ ---------
    -
    ------ ----------
  -
-

在这个示例中,我们定义了一个 Person 接口类型和一个 Engineer 对象类型。它们都有 idnameage 字段。但是,EngineerPerson 多了一个 skills 字段和一个可选的 company 字段。然后,我们又定义了一个 EngineerInput 输入类型,它用来添加新的工程师。最后,我们还定义了一个 PersonResolver 解析器,它有三个查询方法和一个添加工程师的变更。

在这个更复杂的示例中,我们使用了许多 type-graphql 提供的功能。特别地,我们使用了 @InterfaceType 装饰器定义了一个 GraphQL 接口类型。我们还使用了 @Mutation@InputType 装饰器定义了 GraphQL 的变更和输入类型。@FieldResolver 装饰器则用于定义复杂字段的解析器。

总之,type-graphql 可以让我们更容易地构建和维护 GraphQL API。它提供了非常便利和强大的功能,使用起来也十分简单。如果你正在学习或使用 GraphQL,不妨试试 type-graphql 吧!

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/196160