构建项目报错connectionField不存在于ObjectDefinitionBlock<"Query">类型
报错场景
基于Next.js+GraphQL+Prisma技术栈参考官方全栈教程构建项目时触发构建失败,最终命令执行退出码为1,报错文件路径为./graphql/types/Link.ts,错误定位在第20行第7列。
错误信息
TS类型报错:Property 'connectionField' does not exist on type 'ObjectDefinitionBlock<"Query">'
对应报错代码片段:
18 | type: 'Query', 19 | definition(t) { > 20 | t.connectionField('links', { | ^ 21 | type: Link, 22 | resolve: async (_, { after, first }, ctx) => { 23 | const offset = after ? cursorToOffset(after) + 1 : 0;
产生原因
- 核心原因:
connectionField是Relay风格分页的扩展API,不属于Nexus核心库自带方法,需要引入对应扩展插件并完成注册,才会在类型定义块的t对象上挂载该方法。未注册插件时TS类型定义中不存在该属性,就会触发报错。 - 常见诱因:依赖版本不匹配。教程发布时间较早,如果安装依赖时拉取了跨大版本的最新Nexus生态包,插件导出规则、API挂载逻辑发生变更,也会触发该类型错误。
修复方案
- 安装缺失的Relay连接分页插件依赖,在项目根目录执行命令:
yarn add nexus-plugin-relay-connection - 在GraphQL Schema的初始化入口文件(通常路径为
./graphql/schema.ts)中注册该插件,示例配置:import { makeSchema } from 'nexus' import { relayConnectionPlugin } from 'nexus-plugin-relay-connection' // 保留项目中原有的其他引入内容 export const schema = makeSchema({ types: [ // 保留项目中原有的所有类型定义,包含Link类型 ], plugins: [ relayConnectionPlugin, // 新增注册该插件 // 保留项目中原有的其他插件配置 ], // 其余原有配置项保持不变即可 }) - 若注册插件后仍报错,属于依赖版本错配问题:删除本地
node_modules文件夹与yarn.lock锁文件,在package.json中将nexus、nexus-plugin-prisma、@prisma/client等GraphQL、Prisma相关依赖的版本号,对齐教程中指定的版本,重新执行yarn install安装依赖。 - 配置修改完成后,重启IDE的TS服务(VS Code可通过快捷键Ctrl+Shift+P调出命令面板,选择「Restart TS Server」),重新执行构建命令验证修复结果。
内容的提问来源于stack exchange,提问作者Hany Morcos
相关产品推荐
相关产品推荐

