0.1.1 • Published 11 months ago
@jcsj/emit v0.1.1
About
- A Type-safe event emitter
Usage
import makeEmit from "@jcsj/emit"
const emit = makeEmit({
msg(content:string) {},
search(firstName:string, lastName:string) {},
});
// Correct
emit("msg", "Happy around!")
// Error: Expected 3 arguments, but got 2. ts(2554)
emit("search", "Izumo")
With Interfaces
interface Events {
msg(content:string):void
search(firstName:string, lastName:string):void
}
const emit = makeEmit<Events>({
msg(content:string) {},
// Error: Property 'search' is missing in type '{ msg(content: string): void; }'
// but required in type 'Events'.ts(2345)
// search(firstName:string, lastName:string) {}
});
With Partials
const emit = makeEmit<Partial<Events>>({
msg(content:string) {},
// Allowed
// search(firstName:string, lastName:string) {}
})
With String Enums as Record keys
enum EV {
msg = "msg",
search = "search",
}
interface Handlers extends Record<EV, any> {
msg(content: string): void
search(firstName: string, lastName: string): void
}
const emit = makeEmit<Handlers>({
search(firstName, lastName) {},
msg(content) {},
});
emit(EV.msg, "Happy around!")