TypeScript开发Apollo Server订阅遇PubSub asyncIterator类型错误
解决Apollo Server PubSub
asyncIterator 类型错误 以下是几种可行的修复方案:
1. 规范上下文类型定义
首先确认你导入PubSub的正确来源(通常是graphql-subscriptions或@apollo/server),然后在上下文类型中显式声明pubsub的类型:
// 从对应包导入PubSub import { PubSub } from 'graphql-subscriptions'; // 定义项目上下文接口 interface AppContext { pubsub: PubSub; } // 在Resolver中使用类型化的上下文 subscribe: (_, __, { pubsub }: AppContext) => pubsub.asyncIterator([CHANGE_EVENT]),
通过明确上下文类型,TypeScript就能正确识别pubsub实例上的asyncIterator方法。
2. 类型断言(快速临时修复)
如果不想调整上下文类型,可以直接对pubsub做类型断言绕过检查:
subscribe: (_, __, { pubsub }) => (pubsub as PubSub).asyncIterator([CHANGE_EVENT]),
注:此方法仅为临时 workaround,建议优先采用第一种方案规范类型定义。
3. 检查依赖版本兼容性
类型错误可能源于@apollo/server与graphql-subscriptions版本不匹配:
- 确保
graphql-subscriptions安装的是最新稳定版 - 确认
@apollo/server(v4+)与graphql-subscriptions的适配性,必要时升级或降级依赖
4. 扩展PubSub类型声明(兜底方案)
如果以上方法都无效,可以通过自定义类型声明文件扩展PubSub类型:
// 在项目中创建 src/types/graphql-subscriptions.d.ts import type { PubSub } from 'graphql-subscriptions'; declare module 'graphql-subscriptions' { interface PubSub { asyncIterator<T>(triggers: string[]): AsyncIterator<T>; } }
该文件会让TypeScript识别PubSub上的asyncIterator方法。
内容的提问来源于stack exchange,提问作者Unlucky
相关产品推荐
相关产品推荐

