@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

清空所有事件监听器。

许可证

MIT