import { TypeVoidFunction } from '../types/voidFunction'; /** * EventEmitter 의 기능과 동일한 맥락으로, 간단히 구성 * @export * @class EventEmitter * @alias event/EventEmitter * @memberof event * @see https://www.npmjs.com/package/events * @example import { EventEmitter } from '@nonoll/code-snippet/event'; const createElement = ({ tag = 'div', id = '', style = '', value = '', text = '' }) => { const doc = window.document; const target = doc.createElement(tag); target.setAttribute('id', id); target.setAttribute('style', style); target.setAttribute('value', value); if (text) { target.textContent = text; } return target; } let ee; const forExample = () => { const doc = window.document; const onButton = createElement({ tag: 'button', text: 'on button' }); const offButton = createElement({ tag: 'button', text: 'off button' }); const emitButton = createElement({ tag: 'button', text: 'emit button' }); const EVENT_NAME = 'EVENT_EXAMPLE'; doc.body.appendChild(onButton); doc.body.appendChild(offButton); doc.body.appendChild(emitButton); ee = new EventEmitter(); ee.on(EVENT_NAME, res => console.log(res)); onButton.addEventListener('click', e => { e.preventDefault(); console.log('onButton clicked'); if (!ee) { return; } ee.off(EVENT_NAME); ee.on(EVENT_NAME, res => console.log(res)); }); offButton.addEventListener('click', e => { e.preventDefault(); console.log('offButton clicked'); if (!ee) { return; } ee.off(EVENT_NAME); }); emitButton.addEventListener('click', e => { e.preventDefault(); console.log('emitButton clicked'); if (!ee) { return; } ee.emit(EVENT_NAME, new Date()); }); } forExample(); */ export declare class EventEmitter { private events; constructor(); /** * 이벤트 감지 등록 * @param {string} eventName * @param {TypeVoidFunction} [listener={@link noop}] * @param {*} [context] * @returns {EventEmitter} * @memberof EventEmitter */ on(eventName: string, /* istanbul ignore next: for noop */ listener?: TypeVoidFunction, context?: any): EventEmitter; /** * 이벤트 감지 해제 * @param {string} eventName * @param {TypeVoidFunction} [listener] * @returns {EventEmitter} * @memberof EventEmitter */ off(eventName: string, listener?: TypeVoidFunction): EventEmitter | false; /** * 이벤트 1회 감지 등록 * @param {string} eventName * @param {TypeVoidFunction} [listener={@link noop}] * @param {*} [context] * @returns {EventEmitter} * @memberof EventEmitter */ once(eventName: string, /* istanbul ignore next: for noop */ listener?: TypeVoidFunction, context?: any): EventEmitter; /** * 이벤트 전파 * @param {string} eventName * @param {...any[]} values * @returns {EventEmitter} * @memberof EventEmitter */ emit(eventName: string, ...values: any[]): EventEmitter; /** * 이벤트 전파 * @param {string} eventName * @param {any} values * @returns {EventEmitter} * @memberof EventEmitter */ fire(eventName: string, values: any): EventEmitter; }