@viso/shared-emitter
v0.2.3
Published
一个轻量级、类型安全的事件发射器实现,专为 TypeScript 项目设计。
Readme
@viso/shared-emitter
一个轻量级、类型安全的事件发射器实现,专为 TypeScript 项目设计。
安装
npm install @viso/shared-emitter功能特点
- 🎯 类型安全: 完全基于 TypeScript 实现,提供完整的类型检查和智能提示
- 🪶 轻量级: 无外部依赖,体积小巧
- 🔌 易集成: 简单的 API 设计,易于集成到任何项目中
- 🧪 经过测试: 完整的单元测试覆盖,确保稳定性和可靠性
- 🔄 灵活: 支持多种事件处理模式(一次性、绑定/解绑等)
使用方法
基本用法
import { createEmitter } from '@viso/shared-emitter'
// 定义事件类型
interface Events {
click: MouseEvent
keydown: KeyboardEvent
custom: string
none: undefined
}
// 创建事件发射器实例
const emitter = createEmitter<Events>()
// 注册事件监听器
emitter.on('click', (event) => {
console.log('点击事件触发:', event)
})
// 触发事件
emitter.emit('click', new MouseEvent('click'))一次性事件监听
// 一次性事件监听器(触发后自动移除)
emitter.once('custom', (event) => {
console.log('自定义事件触发:', event)
})绑定/解绑模式
// 绑定事件(会先移除该类型的所有监听器,再添加新的)
emitter.bind('keydown', (event) => {
console.log('键盘事件绑定:', event)
})
// 解绑指定类型的事件
emitter.unbind('keydown')移除事件监听器
const handler = (event: MouseEvent) => {
console.log('点击事件:', event)
}
// 注册事件监听器
emitter.on('click', handler)
// 移除指定的事件监听器
emitter.off('click', handler)
// 移除指定类型的所有事件监听器
emitter.offAll('click')清空所有事件监听器
// 清空所有事件监听器
emitter.clear()API 参考
createEmitter<Events>(all?: EmitterEventHandlerMap<Events>): Emitter<Events>
创建一个新的事件发射器实例。
参数
all(可选): 外部存储容器,支持跨实例共享事件处理器
返回值
Emitter<Events>: 事件发射器实例
emitter.on<Key extends keyof Events>(type: Key, handler: EmitterHandler<Events[Key]>): void
注册事件监听器。
emitter.off<Key extends keyof Events>(type: Key, handler?: EmitterHandler<Events[Key]>): void
移除事件监听器。
emitter.offAll(type: keyof Events): void
移除指定类型的所有事件监听器。
emitter.emit<Key extends keyof Events>(type: Key, event?: Events[Key]): void
触发指定类型的事件。
emitter.once<Key extends keyof Events>(type: Key, handler: EmitterHandler<Events[Key]>): void
注册一次性事件监听器(触发后自动移除)。
emitter.bind<Key extends keyof Events>(type: Key, handler: EmitterHandler<Events[Key]>): void
绑定事件(先移除该类型的所有监听器,再添加新的)。
emitter.unbind<Key extends keyof Events>(type: Key): void
解绑指定类型的所有事件监听器。
emitter.clear(): void
清空所有事件监听器。