// Type definitions for change-emitter v0.1.2 // Project: https://github.com/acdlite/change-emitter // Definitions by: Iskander Sierra // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped declare module 'change-emitter' { type Unlisten = () => void; type Listener = (...args: any[]) => void; type ListenerOf0 = () => void; type ListenerOf1 = (value: T) => void; type ListenerOf2 = (value1: T1, value2: T2) => void; type ListenerOf3 = (value1: T1, value2: T2, value3: T3) => void; type ListenerOf4 = (value1: T1, value2: T2, value3: T3, value4: T4) => void; type ListenerOf5 = (value1: T1, value2: T2, value3: T3, value4: T4, value5: T5) => void; interface ChangeEmitter { listen(listener: Listener): Unlisten; emit(...args: any[]): void; } interface ChangeEmitterOf1 { listen(listener: ListenerOf1): Unlisten; emit(value: T): void; } interface ChangeEmitterOf0 { listen(listener: ListenerOf0): Unlisten; emit(): void; } interface ChangeEmitterOf2 { listen(listener: ListenerOf2): Unlisten; emit(value1: T1, value2: T2): void; } interface ChangeEmitterOf3 { listen(listener: ListenerOf3): Unlisten; emit(value1: T1, value2: T2, value3: T3): void; } interface ChangeEmitterOf4 { listen(listener: ListenerOf4): Unlisten; emit(value1: T1, value2: T2, value3: T3, value4: T4): void; } interface ChangeEmitterOf5 { listen(listener: ListenerOf5): Unlisten; emit(value1: T1, value2: T2, value3: T3, value4: T4, value5: T5): void; } export function createChangeEmitter(): ChangeEmitter; export function createChangeEmitter(): ChangeEmitterOf1; export function createChangeEmitter(): ChangeEmitterOf2; export function createChangeEmitter(): ChangeEmitterOf3; export function createChangeEmitter(): ChangeEmitterOf4; export function createChangeEmitter(): ChangeEmitterOf5; }