EventEmitter

// 大多数 Node.js 核心 API 构建于惯用的异步事件驱动架构,    // 其中某些类型的对象(又称触发器,Emitter)会触发命名事件来调用函数(又称监听器,Listener)。    // 例如,net.Server 会在每次有新连接时触发事件,fs.ReadStream 会在打开文件时触发事件,stream会在数据可读时触发事件。    // http://nodejs.cn/api/events.html#events_passing_arguments_and_this_to_listeners    export class EventEmitter {//所有能触发事件的对象都是 EventEmitter 类的实例。        // emitter.on(eventName, listener) 的别名        addListener(event: string | symbol, listener: (...args: any[]) => void): this;        // 用于将一个或多个函数绑定到命名事件上。 事件的命名通常是驼峰式的字符串。        // eventEmitter.on() 用于注册监听器        on(event: string | symbol, listener: (...args: any[]) => void): this;        // 使用 eventEmitter.once() 可以注册最多可调用一次的监听器。 当事件被触发时,监听器会被注销,然后再调用。        once(event: string | symbol, listener: (...args: any[]) => void): this;        removeListener(event: string | symbol, listener: (...args: any[]) => void): this;        removeAllListeners(event?: string | symbol): this;        setMaxListeners(n: number): this;        getMaxListeners(): number;        listeners(event: string | symbol): Function[];        // 当 EventEmitter 对象触发一个事件时,所有绑定在该事件上的函数都会被同步地调用。        // eventEmitter.emit() 用于触发事件        // eventEmitter.emit() 方法可以传任意数量的参数到监听器函数。        // 当监听器函数被调用时, this 关键词会被指向监听器所绑定的 EventEmitter 实例。        // 按照监听器注册的顺序,同步地调用每个注册到名为 eventName 的事件的监听器,并传入提供的参数。        // 如果事件有监听器,则返回 true,否则返回 false。        emit(event: string | symbol, ...args: any[]): boolean;        // A class method that returns the number of listeners for the given eventName registered on the given emitter.        listenerCount(type: string | symbol): number;        // Added in Node 6...        prependListener(event: string | symbol, listener: (...args: any[]) => void): this;        prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this;        // 返回已注册监听器的事件名数组。 数组中的值为字符串或 Symbol。        eventNames(): Array<string | symbol>;    }