typescript 为graphql-codegen生成子类型

6pp0gazn  于 2023-05-08  发布在  TypeScript
关注(0)|答案(1)|浏览(160)

我正在使用graphql-codegen库中的typescript-operations。但我来自阿波罗弃用的代码生成器,喜欢他们导出类型的方式。
对于这样的查询

query MyData {
  viewer {
    id
    username
  }
}

我会从apollo-tooling codegen得到这个:

export type MyDataQuery_viewer = {
  __typename: 'Viewer';
  id: number;
  username: string;
}
export type MyDataQuery = {
  __typename: 'Query',
  viewer?: MyDataQuery_viewer;
}

但在graphql-codegen中,我得到的是:

export type MyDataQuery = {
  __typename: 'Query',
  viewer?: {
    __typename: 'Viewer';
    id: number;
    username: string;
  };
}

graphql-codegen是否存在任何配置,可以为我提供所有嵌套对象的类型,而不是将所有内容定义在单个类型中?

x7yiwoj4

x7yiwoj41#

graphql-codegen默认情况下会为片段生成单独的类型,所以这就是我解决这个问题的方法:

fragment ViewerFields on Viewer {
  id
  username
}

query MyData {
  viewer {
    ...ViewerFields
  }
}

会产生

export type ViewerFieldsFragment = {
  __typename: 'Viewer';
  id: number;
  username: string;
}

export type MyDataQuery = {
  __typename: 'Query',
  viewer?: {
    __typename: 'Viewer';
    id: number;
    username: string;
  }
}

您可以在代码中使用ViewerFieldsFragment。如果需要,可以使用operations插件的omitOperationSuffix配置选项(typescript-operations插件在幕后使用)更改Fragment后缀。

相关问题