es-signal信号事件系统

事件驱动的代码里,用得最多的就是各种事件发射器了。不过用惯了 EventEmitter,你是不是也觉得类型不清楚、调试麻烦?es-signal就挺适合你换个口味试试。

@plato/signalSignal 是种挺灵活的实现:不是继承类,而是组合式的设计。意思是你不用被传统继承结构限制住,事件发出去也自由。

用法也蛮直接:

import { Signal } from "@plato/signal";

const onPing = new Signal(); onPing.receive(() => { // 收到 ping 事件 }); onPing.emit();

默认它的接收器参数是 (...args: any[]) => void,不过你可以在创建 Signal 时加上类型:

const onMessage = new Signal();
onMessage.receive((msg) => {
  console.log(msg);
});
onMessage.emit("Hello!");

强类型的好处你懂的,IDE 提示准,参数错误早早报,还不用到处 ascast 类型,舒服多了。

如果你平时用 Typed-event-dispatcherNest Emitter 这类库,也可以类比理解。它们思路差不多,都是想让事件系统别再“any any 地跑”。

es-signal比较轻巧,适合你在需要事件机制、但又想要类型安全的项目里用。是配合 ReactVue 这类响应式框架,也能玩出不少花样。

如果你正想找个不那么复杂的事件库,又对类型系统有点要求,es-signal还蛮值得一试的。

zip 文件大小:35.36KB