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

NestJS中PubSub报错:类型不存在asyncIterator属性(TypeScript 2339)

解决NestJS中PubSub的TypeScript错误:Property 'asyncIterator' does not exist on type 'PubSub<Record<string, never>>'

这个错误源于graphql-subscriptions v3.x 移除了PubSub类的asyncIterator方法,同时默认类型定义过于宽泛导致类型推断失效。以下是具体修复步骤:

1. 替换asyncIterator为subscribe方法

v3版本的PubSub改用subscribe方法创建异步迭代器,直接替换代码中的调用:

@Subscription(() => ChatModel, {
    name: 'chatSent',
    filter: function (this: ChatResolver, payload, variables, context) {
      // 注意:需从context中正确获取user,比如const user = context.user;
      return this.chatService.filterChatSentEvent(payload, context.user);
    },
  })
chatSent() {
  return pubSub.subscribe('chatSent'); // 替换asyncIterator为subscribe
}

2. 为PubSub指定正确的泛型类型

默认的PubSub<Record<string, never>>会导致TypeScript无法推断事件payload类型,创建实例时明确指定事件类型映射:

import { PubSub } from 'graphql-subscriptions';

// 定义所有订阅事件的类型映射
type PubSubEvents = {
  chatSent: ChatModel; // 对应chatSent事件的payload类型
};

export const pubSub = new PubSub<PubSubEvents>();

3. 额外修复:filter函数的变量问题

你代码中的user变量未定义,需从context参数中提取(比如context.user),否则会触发另一个TypeScript错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:12:07