peer-calls/src/shared/TypedEmitter.ts
2019-11-15 20:28:13 -03:00

20 lines
611 B
TypeScript

import { EventEmitter } from 'events'
type Callback<A> = (a: A) => void
// eslint-disable-next-line
type Events = Record<string | symbol, any>
export interface TypedEmitter<E extends Events>
extends EventEmitter {
addListener<K extends keyof E>(t: K, callback: Callback<E[K]>): this
removeListener<K extends keyof E>(t: K, callback: Callback<E[K]>): this
on<K extends keyof E>(t: K, callback: Callback<E[K]>): this
once<K extends keyof E>(t: K, callback: Callback<E[K]>): this
off<K extends keyof E>(t: K, callback: Callback<E[K]>): this
emit<K extends keyof E>(t: K, value: E[K]): boolean
}