GraphQL 与 TypeScript 的深度融合

常规情况下的GraphQL

GraphQL 是一个用于API的查询语言与运行时环境,它使得客户端可以精确地请求数据,并仅仅获取需要的内容,从而提高数据请求效率。通常情况下,在前端开发中,GraphQL 会配合 Apollo 客户端使用,可以快速开发出强大而又灵活的应用程序。

在使用GraphQL时,我们通常会定义自己的Schema、Resolver以及Types等一系列相关的类型。其中,Schema 定义的是数据的结构,而 Types(包括Query、Mutation等)则是针对这个结构的操作。在对这些类型进行定义时,我们需要在其中添加对应的数据类型和变量。

GraphQL 与 TypeScript 结合

虽然GraphQL和Apollo的配合在开发中已经显得越来越流行,不过当应用切换到 TypeScript 开发时,我们会发现在这种架构下使用这种组件变得不那么直观、不那么明显,需要更多的类型定义和较多的类型检查等等。因此,开发者也提出了自己独特的解决方案,那就是 TypeScript 与 GraphQL 深度结合,让我们来具体了解一下。

首先,让我们来看一下GraphQL的一个Query:

上述代码表示我们希望从服务端获取用户信息,需要给出该用户的 ID,从而得到对应的名字和年龄等信息。但是在写这样的Query时,我们会发现变量的类型并没有被声明,只有在构建使用它的代码时才会发现。

如果我们再使用 TypeScript 的话,则可以通过声明类型的方式,不仅使得变量的代码层面更加强健,还能够将GraphQL的定义和现实代码结合更加紧密。下面就让我们来看下面的 TypeScript 代码实现这个Query:

上面的代码中,我们使用了 interface 来声明类型,通过这种方式来对Query中所需的数据类型进行声明。在接下来的函数 getUserInfo 的实现中,还需要额外处理哪些字段是必要的、哪些是可选的等问题,这样做也可以有效避免由于开发疏忽所产生的不必要错误。

案例

下面让我们来看一个具体的案例吧。

在这个案例中,我们需要开发一个支持登录和注册的前后端分离的应用程序。前端通过GraphQL来请求后端数据,并将相关数据展示给用户。其中,前端应用采用React进行开发,使用TypeScript来支持GraphQL服务。启动方式为,进入 src 目录后,运行 npm run start 即可。

后端服务

提供GraphQL API,代码如下:

前端代码

然后,我们需要为前端代码添加几个必要的包。可以通过以下命令来添加:

该程序需要我们在 React 项目中启动 Apollo Client 来使得前端可以访问 GraphQL API。而在使用 Apollo Client 时,我们需要先创建这个客户端,然后将其传递给其中的其他组件,使得这些组件可以通过这个 API 来请求数据。

代码如下:

运行结果

启动后端服务,并运行前端应用。首先,我们需要在浏览器中输入 http://localhost:3000,然后就可以通过登录或者注册操作来获取一个Token。这个 Token 可以用于后续的持久化登录操作。

接着,在获取到Token后,通过在 http header 中设置该 Token 的值来实现持久化登录,这样,用户在进行资料查询时,可以实现自动登录的效果。

总结

通过对以上代码理解和实践,相信你已经了解了 GraphQL 和 TypeScript 结合的过程。如果你正在开发一个大型的应用程序,这些实践将非常有用,因为它们使得您能够更好地管理和维护代码,并确保您的代码不会产生意外的错误。

当然,本文所给出的示例只是冰山一角,更多详细信息可以上官网获取:https://www.graphql.com/learn/type-system/

希望本文能够帮助到您!

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654df0a67d4982a6eb74c332


纠错
反馈