es-signal信号事件系统
事件驱动的代码里,用得最多的就是各种事件发射器了。不过用惯了 EventEmitter
,你是不是也觉得类型不清楚、调试麻烦?es-signal就挺适合你换个口味试试。
@plato/signal 的 Signal
是种挺灵活的实现:不是继承类,而是组合式的设计。意思是你不用被传统继承结构限制住,事件发出去也自由。
用法也蛮直接:
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 提示准,参数错误早早报,还不用到处 as
来 cast
类型,舒服多了。
如果你平时用 Typed-event-dispatcher 或 Nest Emitter 这类库,也可以类比理解。它们思路差不多,都是想让事件系统别再“any any 地跑”。
,es-signal比较轻巧,适合你在需要事件机制、但又想要类型安全的项目里用。是配合 React
或 Vue
这类响应式框架,也能玩出不少花样。
如果你正想找个不那么复杂的事件库,又对类型系统有点要求,es-signal还蛮值得一试的。
35.36KB
文件大小:
评论区