问题标签 [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 回答
624 浏览

typescript - Graphql codegen 配置不使用 Glob 表达式加载文档

我的 API 是用 TypeScript/Apollo 编写的,我可以在 http://localhost:4000/graphql 上运行查询/突变。我的前端是 Next.js 和 Apollo 客户端。我使用 GraphQL Codegenerator 来生成我需要的客户端代码。

我在用:

我的codegen.yml文件是

我更改 API 解析器时运行的脚本是"gen": "graphql-codegen --config codegen.yml"

如果我确实运行此代码,则会收到错误消息:

但是如果codegen.yml按如下方式设置我的文件它可以工作(并且我在其中一个组件中测试了一个查询,我可以访问数据):

我不确定我到底做错了什么,更奇怪的是它曾经有效。我记得最近更新了我的部门。我看到并尝试了其他一些答案,例如这个这个,但无济于事:(

0 投票
0 回答
208 浏览

node.js - 生成的类型不适合解析器

我对 graphql-code-generator 有疑问。生成的类型不适用于解析器。我收到一条错误消息viewer: () => ({

输入 '() => { createUser: () => { lastName: string; 名字:字符串;昵称:字符串;电子邮件:字符串;性别:用户性别;年龄:字符串;}; }' 不可分配给类型 'Resolver<ResolverTypeWrapper<Pick<ViewerMutation, "__typename"> & { createUser: UnconfirmedUser | 承诺 | 未发送的信 | 承诺<...> | 警告重复电子邮件 | 承诺<...>; }>、{}、MyContext、{}>'。

这是我的代码

代码生成.yml

打字稿解析器.ts

架构.ts

解析器.ts

如何纠正这个错误?

0 投票
0 回答
74 浏览

graphql - GraphQL 代码生成 React Hooks + Typescript (graphql-codegen)

我们目前使用graphql-codegen生成 React Hooks 来查询我们的 GraphQL 服务器。

鉴于我们目前有 2 个端点,我们像这样进行拆分:

这意味着我们需要在每次想要访问 ServiceB 时提供 serviceName 上下文变量。

鉴于我们有 2 次调用graphql-codegen(每个服务都有自己的架构/设置),有没有一种方法可以自动添加baseOptions正确的上下文。

否则我们需要继续这样做:

但我更喜欢上下文有一个默认值,我只是这样做了:

基本上问题是我们是否可以为通过 graphql-codegen 生成的代码提供默认上下文

0 投票
0 回答
65 浏览

graphql - 当他们期望不同名称的查询根时,如何将 graphql-code-generator 与 Hasura 一起使用?

Hasura组查询发出的模式在query_roottype下。但graphql-codegen希望它们归为一个名为Query. 人们如何弥合这一差距?

0 投票
0 回答
140 浏览

typescript - 使用 graphql-codegen 重命名类型

我正在开发一个遗留代码库,在我们的 GraphQL 模式中,一个接口被定义为“订阅”:

这很好用(我们不使用订阅,也没有计划),但是当我尝试使用graphql-codegen自动生成 Typescript 类型以供我们在前端代码中使用时,该generates步骤失败并出现以下错误:

显而易见的答案是重命名接口。果然,重命名为类似的东西可以ISubscription解决所有问题。我想知道是否有一种方法可以避免更改我们的架构中的任何内容并graphql-codegen仅在前端代码中翻译/重命名类型。这可能吗?

0 投票
1 回答
1710 浏览

javascript - 转换也许[]'到'字符串[]

我正在使用带有生成类型的 graphql,并且正在努力将它们转换为我需要将其传递给我的数据服务调用的类型。

@graphql-codegen 给了我一个 args 类型

(我真的不明白为什么它生成为 Maybe 类型,因为 graphql 模式强制我只使用 ids(字符串)数组的参数进行查询)

在我的解析器中,我需要调用一个接受字符串数组的服务。一切都按预期工作(使用@ts-ignore),但现在我需要修复我的类型。

我有一个只有这里类型的代码框https://codesandbox.io/s/typescript-playground-export-forked-3fpx9?file=/index.ts

我目前收到错误消息-“TS2345:'Maybe[]' 类型的参数不可分配给'string[]' 类型的参数。”

非常感谢任何帮助

0 投票
1 回答
995 浏览

node.js - 当 Apollo Server 处于生产模式时,如何借助 graphql-codegen 为 React 生成 Graphql 类型?

当后端模式设置为NODE_ENV: developmentall 时完美运行,但在生产模式下 graphql-codegen 失败并出现错误:

本地网络服务器错误:

Apollo Server 不允许 GraphQL 自省,但查询包含 _schema 或 _type。要启用自省,请将 introspection: true 传递给生产环境中的 ApolloServer

生产网络服务器错误:

无法从https://example.com/graphql加载架构,原因:无法验证第一个证书。GraphQL 代码生成器支持:

  • ES 模块和 CommonJS 导出(默认导出或命名导出“模式”)
  • 自省 JSON 文件
  • GraphQL 端点的 URL
  • 具有类型定义的多个文件(glob 表达式)
  • 配置文件中的字符串

前端codegen.yml:

前端开发依赖:

npm 脚本:

./src/generated/目录添加到 .gitignore

0 投票
1 回答
973 浏览

typescript - GraphQL 查询结果中的类型不存在属性

在 React 组件中,我使用 GraphQL 查询来获取数据:

关于数据解构

类型检查返回错误

尝试分配一个无助于消除错误""的默认值。first_name

这些类型是使用 graphql-codegen 生成的:

如何让查询结果很好地解构?

0 投票
0 回答
355 浏览

enums - 将 graphql-codegen enumValues 与近操作文件和 typescript-react-apollo 一起使用

我使用以下 graphql-codegen 配置来生成打字稿 graphql 代码。

  • 第一个输出包括所有类型定义和解析器类型(typescript - typescript-resolvers)
  • 第二个输出包括 apollo 钩子和操作类型/代码,其基本类型定义取决于使用baseTypesPath(typescript-operations- typescript-react-apollo) 的第一个输出

使用enumValues正确生成和映射的解析器,但生成的操作和阿波罗挂钩使用查询参数的内部值,因为它引用基本类型枚举值

问题是生成的操作代码使用内部枚举而不是 sdl 枚举,因此在查询枚举值不正确时会失败

0 投票
0 回答
80 浏览

typescript - 在 Gatsby 和 Typescript 项目中使用生成的 graphql 查询类型和我的自定义 React 挂钩

我在我的 Gatsby(和 Typescript)项目中为我的站点元数据创建了一个自定义 React 钩子:

例如,在里面Header.tsx我使用它:

const { title } = useSiteMetaData();

在我的标题组件下方:

为了为我的 graphql 查询生成类型,我使用了 Gatsby 插件Gatsby Typescript Graphql Codegen

它生成一个文件graphql-types.ts。从这个文件中,我可以导入我的 graphql 查询:

在我的自定义钩子中,我尝试像这样使用它:

但是在里面Header.tsx(我使用钩子的地方),我收到以下错误:

类型 'Maybe<Pick<SiteSiteMetadata, "title" | 上不存在属性 'title' “说明” | “作者” | “年”>> | 不明确的'