diff --git a/lib/emitter.d.ts b/lib/emitter.d.ts index 95b442b..f7f53bc 100644 --- a/lib/emitter.d.ts +++ b/lib/emitter.d.ts @@ -44,11 +44,11 @@ export declare class Emitter { /** * Hooks an event to the client. */ - on(event: EmitterEvents | string, callback: (args?: any) => void): Emitter; + on(event: K, callback: (args: EmitterEventsArgsMap[K]) => void): Emitter; /** * Unhooks an event from the client. */ - off(event: EmitterEvents | string, callback: (args?: any) => void): Emitter; + off(event: K, callback: (args: EmitterEventsArgsMap[K]) => void): Emitter; private _checkEvent; /** * Invokes the callback with a specific name. @@ -117,6 +117,19 @@ export declare enum EmitterEvents { presence = "presence", me = "me" } +/** + * Represents the argument type of each event callback. + */ +export declare interface EmitterEventsArgsMap { + [EmitterEvents.connect]: Emitter, + [EmitterEvents.disconnect]: Emitter, + [EmitterEvents.message]: EmitterMessage, + [EmitterEvents.offline]: Emitter, + [EmitterEvents.error]: unknown, + [EmitterEvents.keygen]: KeyGenEvent, + [EmitterEvents.presence]: PresenceEvent, + [EmitterEvents.me]: MeEvent +} /** * Represents connection options. * diff --git a/lib/emitter.ts b/lib/emitter.ts index d61abb7..bb879fd 100644 --- a/lib/emitter.ts +++ b/lib/emitter.ts @@ -39,7 +39,7 @@ export class Emitter { this._callbacks = {"connect": [handler]}; this._mqtt = mqtt.connect(brokerUrl, request); - this._mqtt.on(EmitterEvents.connect, () => this._tryInvoke(EmitterEvents.connect, this)); + this._mqtt.on("connect", () => this._tryInvoke(EmitterEvents.connect, this)); this._mqtt.on("close", () => this._tryInvoke(EmitterEvents.disconnect, this)); this._mqtt.on("offline", () => this._tryInvoke(EmitterEvents.offline, this)); this._mqtt.on("error", error => this._tryInvoke(EmitterEvents.error, error)); @@ -226,7 +226,7 @@ export class Emitter { /** * Hooks an event to the client. */ - public on(event: EmitterEvents | string, callback: (args?: any) => void): Emitter { + public on(event: K, callback: (args: EmitterEventsArgsMap[K]) => void): Emitter { this._checkEvent('off', event); if (!this._callbacks) { this._throwError("emitter.on: called before connecting"); @@ -244,7 +244,7 @@ export class Emitter { /** * Unhooks an event from the client. */ - public off(event: EmitterEvents | string, callback: (args?: any) => void): Emitter { + public off(event: K, callback: (args: EmitterEventsArgsMap[K]) => void): Emitter { this._checkEvent('off', event); if (!this._callbacks) { this._throwError("emitter.off: called before connecting"); @@ -400,6 +400,20 @@ export enum EmitterEvents { me = "me" } +/** + * Represents the argument type of each event callback. + */ +export interface EmitterEventsArgsMap { + [EmitterEvents.connect]: Emitter, + [EmitterEvents.disconnect]: Emitter, + [EmitterEvents.message]: EmitterMessage, + [EmitterEvents.offline]: Emitter, + [EmitterEvents.error]: unknown, + [EmitterEvents.keygen]: KeyGenEvent, + [EmitterEvents.presence]: PresenceEvent, + [EmitterEvents.me]: MeEvent +} + /** * Represents connection options. *