GraphQL Code Generator 是一个工具,可以根据 GraphQL 的 Schema 自动生成 TypeScript 的类型定义

以下是对于 TypeScript × GraphQL 开发中必不可少的图形代码生成器的介绍。

スクリーンショット 2020-04-04 13.55.16.png

什么是GraphQL Codegen?

这是一个用于根据GraphQL的端点和GraphQL的模式定义来生成TypeScript类型定义的CLI工具。
而且,通过使用插件,它不仅可以生成TypeScript的类型定义,还可以生成Apollo客户端代码、TypeScript的解析器以及Java的解析器等各种内容。

生成的示例包括:

一个例子是生成物。

    • TypeScriptの型定義 <= 今回説明

 

    • TypeScriptのオペーレーションの型定義 <= 今回説明

 

    • schema.graphqlファイル <= 今回説明

 

    • vue-apolloのクライアントコード

 

    • react-apolloのクライアントコード

 

    • TypeScriptのリゾルバ

 

    • Floq Type

 

    • Javaのリゾルバ

 

    …などなど

设置

请在项目目录中执行以下操作。

npx graphql-codegen init

根据init时的选择内容,会生成codegen.yml文件。

最小的配置文件如下所示。 de .)

schema: エンドポイントのURL、schemaファイルパス
generates:
  生成したいファイルパス
    plugins:
      使用するプラグイン

生成 TypeScript 的类型定义

首先,生成TypeScript类型定义从基本的GraphQL模式。请将codegen.yaml配置如下:

schema: "https://example.com/v1/graphql"
generates:
  ./src/@types/types.d.ts:
    plugins:
      - typescript

当在进行cli配置时,执行指定的npm脚本后,应会在./src/@types目录下生成types.d.ts。

# init時に設定したnpmスクリプト名で実行
yarn codegen

生成操作的类型定义

除了从schema自动生成的类型之外,还可以根据在产品中使用的查询和变更操作创建相应的类型。
通过添加@graphql-codegen/typescript-operations,并修改codegen.yml文件如下。

yarn add -D @graphql-codegen/typescript-operations 
  schema: "https://example.com/v1/graphql"
+ documents: src/graphql/**/*.ts
  generates:
    ./src/@types/types.d.ts:
      plugins:
        - typescript
+       - typescript-operations

在当前状态下执行yarn codegen,可以生成以下操作(Mutation)的目标:

export const ADD_PRODUCT = gql`
    mutation AddProduct($name: String!) {
        insert_products(objects: { name: $name }) {
            returning {
                id
                name
                created_at
            }
        }
    }
  `

Mutation的返回值和参数类型是自动生成的。你可以直接在使用apollo客户端时指定类型并使用!

export type AddProductMutationVariables = {
  name: Scalars['String'];
};

export type AddProductMutation = (
  { __typename?: 'mutation_root' }
  & { insert_products?: Maybe<(
    { __typename?: 'products_mutation_response' }
    & { returning: Array<(
      { __typename?: 'products' }
      & Pick<Products, 'id' | 'name' | 'created_at'>
    )> }
  )> }
);

生成schema.graphql

如果您正在使用像HASURA这样的GraphQL引擎,并且没有schema.graphql文件,那么您也可以生成它。

yarn add -D @graphql-codegen/schema-ast
  schema: "https://example.com/v1/graphql"
  documents: src/graphql/**/*.ts
  generates:
    ./src/@types/types.d.ts:
      plugins:
        - typescript
        - typescript-operations
+   ./schema.graphql:
+     plugins:
+       - schema-ast

在这个状态下运行yarn codegen,将在项目根目录下生成./schema.graphql文件。

有了`schema.graphql`文件后,可以在IntelliJ的JS-GraphQL插件等工具中实现代码自动补全,非常方便。

在介绍中提到,JS-GraphQL是一款在使用IntelliJ编写GraphQL时非常方便的插件。

结束

用graphql codegen与GraphQL和TypeScript结合使用能够显著改善开发体验哦~

广告
将在 10 秒后关闭
bannerAds