@minto-ai/type-writer
Version:
流式打字机效果组件,提供逐字符显示文本的打字机效果
42 lines (34 loc) • 898 B
text/typescript
interface EventCallback {
(...args: any[]): any
}
class EventBus<E = any> {
private listeners: Map<E, EventCallback[]> = new Map()
on(eventName: E, callback: EventCallback): void {
const callbacks = this.listeners.get(eventName)
if (callbacks) {
callbacks.push(callback)
}
else {
this.listeners.set(eventName, [callback])
}
}
emit<T = any>(eventName: E, data?: T): void {
const callbacks = this.listeners.get(eventName)
if (callbacks) {
callbacks.forEach((callback) => {
callback(data)
})
}
}
clear(): void {
this.listeners.clear()
}
}
let eventBusInstance: EventBus | null = null
function createEventBus<E>(): EventBus<E> {
if (!eventBusInstance) {
eventBusInstance = new EventBus<E>()
}
return eventBusInstance as EventBus<E>
}
export { createEventBus }