You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取GraphQL查询结果对象的TypeScript类型,无需手动定义

如何自动获取GraphQL查询结果的TypeScript类型?

要实现无需手动定义类型或使用any就能获取GraphQL查询对应的TypeScript类型,最常用的方案是使用GraphQL Code Generator,它能根据你的查询和GraphQL Schema自动生成类型定义。以下是具体步骤:

1. 安装必要依赖

通过npm或yarn安装代码生成器及相关插件:

npm install --save-dev @graphql-codegen/cli @graphql-codegen/typescript @graphql-codegen/typescript-operations
# 或使用yarn
yarn add --dev @graphql-codegen/cli @graphql-codegen/typescript @graphql-codegen/typescript-operations

2. 配置代码生成器

在项目根目录创建codegen.ts配置文件,指定Schema来源、查询文件路径和类型输出位置:

import type { CodegenConfig } from '@graphql-codegen/cli';

const config: CodegenConfig = {
  // 替换为你的GraphQL Schema地址(远程端点或本地schema文件路径)
  schema: 'https://rickandmortyapi.com/graphql',
  // 匹配项目中所有包含gql查询的文件
  documents: ['./src/**/*.ts', './src/**/*.tsx'],
  generates: {
    // 指定类型文件输出路径
    './src/generated/graphql.ts': {
      plugins: ['typescript', 'typescript-operations'],
    },
  },
};

export default config;

3. 添加生成脚本并执行

在package.json的scripts中添加一条命令:

{
  "scripts": {
    "codegen": "graphql-codegen --config codegen.ts"
  }
}

然后运行命令生成类型文件:

npm run codegen
# 或
yarn codegen

4. 为查询命名并使用自动生成的类型

首先给你的查询添加一个明确的名称(方便生成对应的类型名):

const GET_CHARACTERS = gql`
    query GetCharacters {
        characters{
                results{
                id
                name
                image
                gender
            }
        }
    }
`

生成完成后,你可以直接导入生成的类型(比如GetCharactersQuery),在使用useQuery时指定类型:

import { useQuery } from '@apollo/client';
import { GET_CHARACTERS } from './your-query-file';
import { GetCharactersQuery } from './generated/graphql';

const CharactersList = () => {
  const { data, loading, error } = useQuery<GetCharactersQuery>(GET_CHARACTERS);

  if (loading) return <div>加载中...</div>;
  if (error) return <div>出错了:{error.message}</div>;

  // 此时data会自动拥有完整的类型提示,无需手动定义
  return (
    <div>
      {data?.characters?.results?.map(character => (
        <div key={character.id}>
          <img src={character.image} alt={character.name} />
          <h3>{character.name}</h3>
          <p>性别:{character.gender}</p>
        </div>
      ))}
    </div>
  );
};

每次修改查询或Schema后,重新运行npm run codegen就能自动更新类型定义,确保类型与查询、Schema始终同步。

内容的提问来源于stack exchange,提问作者Krutik Aghera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 01:45:21