如何从TypeScript解析器生成GraphQL Schema?求相关工具库
从TypeScript解析器生成GraphQL Schema的可行方案
你提到的反向生成思路确实合理,目前有几个成熟的库支持从TypeScript代码(包含解析器逻辑)生成GraphQL Schema,避免了Schema和TS类型重复定义的冗余:
1. TypeGraphQL
这是最流行的方案之一,通过装饰器标记解析器类、方法和返回类型,编译时自动生成对应的GraphQL Schema:
import { ObjectType, Query, Resolver, buildSchema } from "type-graphql"; @Resolver() class QueryResolver { // 用@Query装饰器标记这是Query字段,指定返回类型为String @Query(() => String) hello() { return "world!"; } } // 生成GraphQL Schema const schema = await buildSchema({ resolvers: [QueryResolver], });
2. Nexus Schema(@nexus/schema)
Nexus提供了一套TS-first的DSL,让你在定义解析逻辑的同时直接描述GraphQL类型,最终自动生成Schema:
import { queryType, makeSchema } from '@nexus/schema' const Query = queryType({ definition(t) { // 定义hello字段,指定返回类型为string,同时编写解析逻辑 t.string('hello', { resolve: () => 'world!' }) } }) // 生成Schema const schema = makeSchema({ types: [Query], })
补充说明
你提到的直接从typeof resolvers生成Schema的方式,由于TypeScript类型仅存在于编译阶段,运行时无法直接读取,所以现有工具大多通过**运行时标记(装饰器/DSL)**的方式保留类型信息,从而实现解析器到Schema的生成。这类工具不仅能生成Schema,还能自动导出对应的TS类型,完全覆盖你想要的"减少重复代码"的需求。
内容的提问来源于stack exchange,提问作者Liam Pillay
相关产品推荐
相关产品推荐

