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

TypeScript开发微服务遇Stan类型无'on'属性报错(TS2339)

解决TypeScript错误:Property 'on' does not exist on type 'Stan'

问题原因

你遇到的错误是因为node-nats-streaming的TypeScript类型定义中,Stan类型未显式声明on方法(尽管底层实例是EventEmitter,原生支持事件监听),或是你未正确安装对应的类型依赖包。

解决方案

方案1:安装类型依赖包

先确认已安装node-nats-streaming的类型定义包:

npm install @types/node-nats-streaming --save-dev
# 或使用yarn
yarn add @types/node-nats-streaming --dev

若安装后仍报错,可尝试清理依赖后重新安装:

rm -rf node_modules package-lock.json
npm install

方案2:类型断言临时修复

如果类型包安装后问题依旧,可通过类型断言告知TypeScriptstan实例支持事件监听:

import nats, { Message } from 'node-nats-streaming';

console.clear();

const stan = nats.connect('ticketing', '123', {
   url: 'http://localhost:4222'
});

// 断言stan为EventEmitter类型
(stan as NodeJS.EventEmitter).on('connect', () => {
    console.log('Listener connected to NATS');

    const subscription = stan.subscribe('ticket:created');

    subscription.on('message', (msg: Message) => {
         const data = msg.getData();
         if (typeof data === 'string') {
             console.log(`Recieved event #${msg.getSequence()}, with data: ${data}`);
         }
    });
})

方案3:使用Promise风格连接(推荐)

node-nats-streaming的connect函数支持Promise调用,这种写法更贴合现代TypeScript规范,也能规避类型问题:

import { connect, Message } from 'node-nats-streaming';

console.clear();

(async () => {
    try {
        const stan = await connect('ticketing', '123', {
            url: 'http://localhost:4222'
        });
        console.log('Listener connected to NATS');

        const subscription = stan.subscribe('ticket:created');

        subscription.on('message', (msg: Message) => {
             const data = msg.getData();
             if (typeof data === 'string') {
                 console.log(`Recieved event #${msg.getSequence()}, with data: ${data}`);
             }
        });
    } catch (err) {
        console.error('Failed to connect to NATS:', err);
    }
})();

补充说明

  • 方案3的Promise写法更直观,还能便捷处理连接失败的异常,建议优先采用。
  • 开发微服务事件订阅器时,记得添加NATS连接断开后的重连逻辑,避免服务意外中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:05:23