跟随Ben Awad的lireddit教程时GraphQL类型生成报错如何解决?
修复方案
1. 处理未使用变量警告
@Arg装饰器里的参数类型回调未使用的参数可以加下划线前缀规避TS警告,修改参数写法:
// 修改前 @Arg("limit", type => Int) limit: number, // 修改后 @Arg("limit", _type => Int) limit: number,
同时确认Int是从type-graphql包导入,不要引入其他包的Int类型避免冲突:
import { Arg, Query, Resolver, Int } from "type-graphql";
2. 解决参数/类型识别错误
你遇到的Unknown type "Int"、Unknown argument "cursor/limit"错误,核心原因是graphql-codegen没有拿到正确的后端Schema:
- 首先确认
PostResolver已经加入到buildSchema的resolvers数组中,否则后端生成的Schema不会包含posts接口的参数定义:
const schema = await buildSchema({ resolvers: [PostResolver], // 必须显式引入你写的Resolver validate: false })
- 如果你
codegen.yml中配置的schema是后端接口地址(比如http://localhost:4000/graphql),必须先启动后端服务器再执行codegen命令,否则无法拉取到正确的Schema;也可以修改配置直接加载本地Schema文件:
schema: ./src/schema.gql # 替换为你本地导出的Schema文件路径
3. 修复代码运行错误
你当前的TypeORM查询参数格式错误,会导致运行时查询失败,修改where调用逻辑:
if (cursor) { // 修正参数格式,把变量用对象包裹 qb.where('"createdAt" < :cursor', { cursor: new Date(parseInt(cursor)) }) }
4. 处理dist文件夹未生成问题
dist是TypeScript编译产物,和graphql-codegen无关,执行tsc命令或者你package.json中配置的build脚本(比如yarn build)即可生成dist文件夹。
内容的提问来源于stack exchange,提问作者Mel
相关产品推荐
相关产品推荐

