对于 graphql-codegen 生成的查询类型,出现“查询参数未知错误”

hel*_*on3 6 typescript graphql apollo-client graphql-codegen

我使用 Pothos 构建 graphql 架构,并使用 graphql-codegen 生成基于该架构的类型。服务器通过 graphql-yoga 和 nextjs 运行,并且通过 graphiql 界面运行时实际查询工作正常。我一直在尝试进行设置,以便根据本文使用 apollo 客户端正确输入我的 gql 架构使用 apollo 客户端正确输入我的 gql 架构。

模式生成器的片段:

builder.queryType({
  fields: t => ({
    greetings: t.string({
      resolve: (root, args, context) => `Welcome ${context.session?.user?.nickname}`
    })
  })
})
Run Code Online (Sandbox Code Playgroud)

graphql-codegen 在书面文件中生成以下类型.ts,因此我知道它看到了正确的架构。

export type Query = {
  __typename?: 'Query';
  greetings: Scalars['String'];
}
Run Code Online (Sandbox Code Playgroud)

但是,当我根据 codegen 文档导入 gql 文件时,它会返回unknown,并且 VSCode 的悬停窗口显示“查询参数未知!请重新生成类型。” 我尝试过重新生成并重新启动 VSCode,但没有任何变化。

import { gql } from '@/gql/gql'

const query = gql('query { greetings }')
Run Code Online (Sandbox Code Playgroud)

Bla*_*ard 6

documents是的,正如其他人提到的,这是中路径的问题codegen.ts。我在文件中有查询.ts,所以我必须将我的documents全局模式更改为

documents: ["src/**/*.ts?(x)"],
Run Code Online (Sandbox Code Playgroud)

最好将其删除,ignoreNoDocuments: true因为它可能会误导您。


old*_*eyg 1

为我解决这个问题的是 codegen.ts 中的文档设置。我在 nextjs 应用程序中,代码位于页面文件夹中,但示例 codegen.ts 使用了 src。更新后

  documents: ["src/**/*.tsx"],
Run Code Online (Sandbox Code Playgroud)

  documents: ["pages/**/*.tsx"],
Run Code Online (Sandbox Code Playgroud)

并重新生成我不再收到错误。