当前位置: 首页 > 知识库问答 >
问题:

如何缩小由图形QL编码器自动生成的打字稿类型?

陶文林
2023-03-14

我从AWS Amplify GraphQL(我相信它使用apollo codegen)自动生成了一个类型脚本,如下所示:

export type GetNoteQuery = {
  getNote:  {
    __typename: "Note",
    id: string,
    createdAt: string | null,
    updatedAt: string | null,
    title: boolean | null,
    content: string | null,
  } | null,

我想生成一个基本类型的“注释”,作为“基本”类型,在使用返回的数据时在我的代码中使用。即将注释映射到React组件上,等等。

有没有办法缩小自动生成的类型,或者以某种方式对其进行扩展,使其看起来像:

type Note = {
    id: string,
    createdAt: string | null,
    updatedAt: string | null,
    title: boolean | null,
    content: string | null
}

共有2个答案

亢正德
2023-03-14

这里是GraphQL代码生成器。

关于生成这种TS代码的决定,我们有一些背景知识:我们开始使用typescript作为一个插件来创建GraphQL模式的精确表示。然后,typescript操作获取操作和片段(从模式中提取特定字段和数据),并生成代码,该代码通过typescript插件从生成的类型中获取相同的字段和数据字段。

我们看到一些开发人员更喜欢更干净的代码,因此您可以使用preResolveTypes:true来避免使用Pick,而只使用原语类型。您还可以使用onlyOperationTypes:true,告知codegen避免生成不需要的类型。

太叔昊苍
2023-03-14

您可以使用索引查询来获取与排除耦合的getNote类型,以从属性类型中删除null。然后,您可以使用Omit来删除额外的属性。

export type GetNoteQuery = {
  getNote: {
    __typename: "Note",
    id: string,
    createdAt: string | null,
    updatedAt: string | null,
    title: boolean | null,
    content: string | null,
  } | null
}

type Note = Omit<Exclude<GetNoteQuery['getNote'], null>, '__typename'>

您还可以使用接口为类型获取更强大的名称:


interface Note extends Omit<Exclude<GetNoteQuery['getNote'], null>, '__typename'> { }


 类似资料:
  • 我刚刚开始进入GraphQL。我使用GraphQL. js和Express。现在我正试图构建一个简单的例子,使用硬编码的JSON作为我的javascript文件中的数据。然后我想使用快速中间件通过curl或失眠来监听HTTP请求。在中间件中,我想使用身体解析器提取查询。现在我有麻烦与解析器。 请看一下我的代码。 这是行不通的。当我使用curl和 curl-XPOST-H“内容类型:应用程序/gra

  • 问题内容: 我希望能够实例化一个Typescript类,在运行时可以获取该类和构造函数的详细信息。我想编写的函数将包含类名和构造函数参数。 问题答案: 您可以尝试: 编辑 此版本可在TypeScript操场上使用,例如:

  • 使用apollo和neo4j graphql js使用graphql尝试neo4j。这是我的typeDefs: 我总是把记者当成空的。对我错过了什么有什么建议吗?

  • 我已经将我的spring boot应用程序与graphql-spqr-spring-boot-starter https://github.com/leangen/graphql-spqr-spring-boot-starter集成在一起,我需要找到一种方法来禁用graph QL模式自省,因为这是生产中的一个安全问题。

  • 如何在Atom编辑器中自动缩进代码?在其他编辑器中,通常可以选择一些代码并自动缩进。 还有键盘快捷键吗?

  • 问题内容: 如何用Java创建条形码图像?我需要一些可以输入数字并产生相应条形码图像的东西。是否有免费的图书馆可用于此类任务? 问题答案: iText是一个很棒的Java PDF库。它们还具有用于创建条形码的API。您无需创建PDF即可使用它。 此页面包含有关创建条形码的详细信息。这是该站点的示例: 您需要确定的最大内容是所需的条形码类型。有许多不同的条形码格式,并且iText确实支持许多。您需要