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

GraphQL如何获取查询选中字段(如String、Int、ID等)的类型?

visit 方法仅会遍历 GraphQL 查询的抽象语法树(AST),查询本身不携带类型定义信息,必须结合对应的 Schema 实例才能获取字段类型。graphql 库提供了 TypeInfo 工具类,可在遍历 AST 的过程中自动跟踪当前节点的类型信息,具体实现如下:

1. 依赖导入

import { buildSchema, TypeInfo, visit, getNamedType } from 'graphql';
import { gql } from '@apollo/client';

2. 构造 Schema 实例

你需要先把本地 schema 文件的 SDL 内容转为可识别的 Schema 实例,示例如下:

// 示例SDL,实际场景可通过fs读取本地.graphql文件的内容传入
const schemaSDL = `
type User {
  firstName: String
  lastName: String
}
type Query {
  user: User
}
`;
const schema = buildSchema(schemaSDL);

3. 结合TypeInfo遍历查询获取字段类型

// 你的查询语句
const GET_USER = gql`
    query user() {
        user {
            firstName
            lastName
        }
    }
`;

// 创建TypeInfo实例,传入构造好的schema
const typeInfo = new TypeInfo(schema);

// 遍历查询AST
visit(GET_USER, typeInfo.getVisitor({
  Field(node) {
    // 当前字段名
    const fieldName = node.name.value;
    // 当前字段的完整类型(包含非空!、列表[]等修饰符)
    const fieldType = typeInfo.getType();
    // 去掉修饰符的原始基础类型
    const baseType = getNamedType(fieldType);

    console.log(`字段名:${fieldName}`);
    console.log(`完整类型:${fieldType.toString()}`);
    console.log(`基础类型名:${baseType.name}\n`);
  }
}));

上述代码的输出结果如下:

字段名:user
完整类型:User
基础类型名:User

字段名:firstName
完整类型:String
基础类型名:String

字段名:lastName
完整类型:String
基础类型名:String

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:45:03