@horyzont85/typed-event-emitter
TypeScript icon, indicating that this package has built-in type declarations

1.0.5 • Public • Published

typed-event-emitter

Here we have some examples of usage:

Simple Emitting and Observing

interface MyEvents {
    RESPONSE: (message: string, code: number) => void;
    CLICK: () => void;
}

let emitter = new TypedEventEmitter<MyEvents>();

// OK, proper parameters' type
emitter.on("RESPONSE", (message: string, code: number) => {
    console.log(`Message: ${message}, code: ${code}`);
});

// OK, proper parameters' type
emitter.emit("RESPONSE", "New response", 400);

// type error, FOO is not type of event
emitter.on("FOO", (message: string, code: number) => {
    console.log(`Message: ${message}, code: ${code}`);
});

// type error, message type is string not number
emitter.on("RESPONSE", (message: number, code: number) => {
    console.log(`Message: ${message}, code: ${code}`);
});

// type error, FOO is not type of event
emitter.emit("FOO", "New response", 400);

// type error, code type is number not string
emitter.emit("RESPONSE", "New response", "400");

Using Typed Event Emitter as a base class

interface MyModel {
    name: string;
    surname: string;
    age: number;
}

interface MyEvents {
    CLICK: (model: MyModel) => void;
}

class MyController extends TypedEventEmitter<MyEvents> {
    constructor() {
        super();
    }

    public emitEvent() {
        this.emit("CLICK", {age: 20, name: "Piotr", surname: "Burning Water"});
    }
}

interface YourEvents {
    RESPONSE: (response: number) => void;
}

class YourController extends TypedEventEmitter<YourEvents> {

    // no possibility to emit events from MyController
    constructor(private myController: Observer<MyEvents>) {
        super();
        this.myController.on("CLICK", (model: MyModel) => {
            console.log(model);
        });
    }
}

let firstController = new MyController();
new YourController(firstController);
firstController.emitEvent();

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 1.0.5
    1
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 1.0.5
    1

Package Sidebar

Install

npm i @horyzont85/typed-event-emitter

Weekly Downloads

1

Version

1.0.5

License

apache-2.0

Unpacked Size

18.4 kB

Total Files

15

Last publish

Collaborators

  • horyzont85