export interface IEventEmitter { dispatch < D > ( eventName , data ) : void ; addListener < N extends string , A extends Array < any > , R > ( eventName , callback ) : ( ( ... args : any [ ] ) => any ) ; removeListener < N extends string > ( eventName , callback ) : void ; }