问题标签 [graphql-codegen]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
330 浏览

typescript - 使用 GraphQL 代码生成器从解析器返回不完整的形状

我使用以下约定让解析器返回部分数据,并允许其他解析器完成缺失的字段:

我遇到的问题是 GraphQL 代码生成器生成了一个Resolver期望Query#users返回完整User形状的类型,当然它不知道即使我从 中返回部分形状Query#users,由于User#extra客户端最终会收到尽管如此,预期的形状。

在让 TS 满意的同时处理这种情况的最佳方法是什么?

0 投票
1 回答
547 浏览

typescript - 使用 graphql-code-generator 生成 React/Apollo 钩子时,数组类型是否不正确?

我想知道在 graphql 查询/突变中定义的数组(可以是有效的 graphql 实现中的单例或元组)是否被 graphql-codegen 转换为严格的数组类型。这是设计使然吗?

鉴于此架构:

这个查询:

graphql-code-generator 将生成:

但是在我见过的(大多数)graphql 实现中,放入一个数组或单个值是有效的:

我错过了什么吗?有没有办法覆盖这个?

这是一个重现“问题”的小型仓库:https ://github.com/kweestian/arrays-gql-gen

0 投票
2 回答
631 浏览

typescript - 当我映射和展平数组时,TypeScript 错误地出错?

我正在使用 GraphQL Codegen 从我的 GraphQL 模式生成 TypeScript 类型。这是我的查询,我使用了一个片段,因此它是唯一易于导出的类型:

返回的数据如下所示:

我可以在新变量上使用这种类型,它可以按预期工作:

但是,当我尝试在另一个变量上使用它时,我得到一个 TypeScript 错误:

TS2322: 类型'(({ __typename?: "ChildProfile" | undefined; } & Pick<ChildProfile, "id" | "name"> & { registrationToday?: ({ __typename?: "Registration" | undefined; } & Pick< ...> & { ...; }) | null | undefined; }) | null | undefined)[]' 不可分配给类型 'Maybe<{ __typename?: "ChildProfile" | 不明确的; } & Pick<ChildProfile, "id" | "name"> & { registrationToday?: ({ __typename?: "Registration" | undefined; } & Pick<...> & { ...; }) | 空 | 不明确的; }>[]'。类型 '({ __typename?: "ChildProfile" | undefined; } & Pick<ChildProfile, "id" | "name"> & { registrationToday?: ({ __typename?: "Registration" | undefined; } & 选择<...> & { ...; }) | 空 | 不明确的; }) | 空 | undefined' 不可分配给类型 'Maybe<{ __typename?: "ChildProfile" | 不明确的; } & Pick<ChildProfile, "id" | "name"> & { registrationToday?: ({ __typename?: "Registration" | undefined; } & Pick<...> & { ...; }) | 空 | 不明确的; }>'。类型 'undefined' 不可分配给类型 'Maybe<{ __typename?: "ChildProfile" | 不明确的; } & Pick<ChildProfile, "id" | "name"> & { registrationToday?: ({ __typename?: "Registration" | undefined; } & Pick<...> & { ...; }) | 空 | 不明确的; }>'。{ __typename?: "ChildProfile" | 不明确的; } & Pick<ChildProfile, "id" | "name"> & { registrationToday?: ({ __typename?: "Registration" | undefined; } & Pick<...> & { ...; }) | 空 | 不明确的; }>'。类型 'undefined' 不可分配给类型 'Maybe<{ __typename?: "ChildProfile" | 不明确的; } & Pick<ChildProfile, "id" | "name"> & { registrationToday?: ({ __typename?: "Registration" | undefined; } & Pick<...> & { ...; }) | 空 | 不明确的; }>'。{ __typename?: "ChildProfile" | 不明确的; } & Pick<ChildProfile, "id" | "name"> & { registrationToday?: ({ __typename?: "Registration" | undefined; } & Pick<...> & { ...; }) | 空 | 不明确的; }>'。类型 'undefined' 不可分配给类型 'Maybe<{ __typename?: "ChildProfile" | 不明确的; } & Pick<ChildProfile, "id" | "name"> & { registrationToday?: ({ __typename?: "Registration" | undefined; } & Pick<...> & { ...; }) | 空 | 不明确的; }>'。}) | 空 | 不明确的; }>'。类型 'undefined' 不可分配给类型 'Maybe<{ __typename?: "ChildProfile" | 不明确的; } & Pick<ChildProfile, "id" | "name"> & { registrationToday?: ({ __typename?: "Registration" | undefined; } & Pick<...> & { ...; }) | 空 | 不明确的; }>'。}) | 空 | 不明确的; }>'。类型 'undefined' 不可分配给类型 'Maybe<{ __typename?: "ChildProfile" | 不明确的; } & Pick<ChildProfile, "id" | "name"> & { registrationToday?: ({ __typename?: "Registration" | undefined; } & Pick<...> & { ...; }) | 空 | 不明确的; }>'。

0 投票
0 回答
672 浏览

reactjs - Graphql Code Generator 打字稿操作插件生成错误的类型

我正在使用带有 typescript 操作插件的 graphql 代码生成器从我的 GraphQL 模式生成 typescript 类型。一切正常,直到突然间,当我运行graphql-codegen --config codegen.yml生成的类型错误时。

下图来自我保存所有生成类型的文件 graphql.tsx。图片

这里还可以看到graphql.tsx文件有145个问题。在对该文件进行快速单词搜索后,我发现 typescript 实用程序类型Pick出现了 145 次。因此,图像中显示的问题发生在文件中的每种Pick类型上。我认为 Pick 类型是由 typescript 操作插件生成的。

当我运行时,graphql-codegen --config codegen.yml我没有错误。

GraphQL Playground 上的一切都localhost:4000/graphql很好。

我的codegen.yml文件:

什么可能导致这个问题。

任何帮助,将不胜感激。

0 投票
0 回答
66 浏览

graphql - 如何使用 Apollo Client 3 传递附加变量?

我正在尝试在我的客户端(阿波罗 3)中传递其他变量,如下所示:

这在阿波罗 3 号上不起作用。但在阿波罗 2 号上它起作用。我忘记了任何设置吗?还是不再可能了?

上下文:用于反应的 graphql 生成器。

0 投票
1 回答
740 浏览

typescript - 如果我不使用放大,如何从 AppSync GraphQL 架构生成 Typescript 定义?

我使用 aws-cdk 设置了我的 AppSync api,并且没有使用他们的放大框架。我试图弄清楚如何/是否可以schema.graphql在不使用放大的情况下从我的 AppSync 文件生成 Typescript 定义,即无法访问amplify codegen命令。我确实尝试安装和运行它,但我假设 amplify 期望文件位于某些目录中,因此失败。

我查看了https://graphql-code-generator.comAWSDateTime但由于AppSync使用的特殊类型(例如我希望能够在不发布架构的情况下在本地生成这些类型。

这是可行的吗?

0 投票
1 回答
1633 浏览

enums - Graphql Codegen - 具有自定义键 => 值的枚举

我使用 graphql-codegen 来生成类型文件。

例如,假设我的schema.graphql文件中有以下内容:

我的generated-types.ts文件中的输出如下:

有没有办法让我在 codegen 运行之前“覆盖”枚举的值?也许如下(我显然尝试过):

这反过来应该产生:

0 投票
1 回答
253 浏览

graphql - 如何使用 sequelize-typescript 通过自定义 Apollo GraphQL 解析器查询相关对象?

如何使用sequelize-typescript通过自定义 Apollo GraphQL 类型查询相关对象?我有以下没有打字稿的查询:

用户事件GraphQL 类型:

用户模型

解析器:

打字稿看不到event.$get('user')

0 投票
1 回答
454 浏览

typescript - 当我不通过 GraphQL 请求项目时,如何在 Typescript 中处理非空值?- 打字稿 - GraphQL

我有一个 GraphQL (GQL) 服务器,并且在前端使用 TypeScript (TS)。这是我的 GQL 类型。

politicalEntityId是不可为空的。如果我要求,这给了我行为politicalEntityId,那么它保证在那里,但如果我不要求它,那么查询将正常运行。

我使用graphql-codegenerator从 GQL 模式中创建 TS 类型。TS 类型使politicalEntityIdas 非空,所以现在在前端我必须始终请求politicalEntityIdas 类型的一部分,AutomatedAlgorithmValue即使它不是我想要请求的东西。

在我的前端代码中,我将数据保存在一个钩子中

这是我的 GQL 请求

此时我不需要politicalEntityId,但是当我尝试将数据添加到我results的 时,TS 编译器知道我正在nullnon-null属性添加politicalEntityId 并引发错误。

non-null如果存在具有其他属性的对象,情况会变得更糟,因为现在请求会随着每个不必要的属性/对象non-null而变得越来越大。non-null

其他人是如何处理这个问题的?我每次都必须创建一个新类型吗?我是否使用Pick来确定数据将在results hook? 是否有一个插件可以使所有内容都可以为空,如果有,我应该使用它吗?

0 投票
1 回答
56 浏览

typescript - `Country = "United States" | 应该如何输入?《加拿大》 | ...` 用 GraphQL 表示?

使用https://graphql-code-generator.com/,GraphQL 中的类型只是设置为String,但在我的带有下拉输入的客户端代码中,类型更具体,因为它是从下拉选项本身派生的:

在这种情况下,从服务器返回的 graphql 数据的类型不如客户端的特定类型。有没有更好的方法来表示这些类型,所以它们是相同的?尝试在枚举中使用国家/地区名称时遇到验证错误。