export interface DispatchOptions { name: string; params: Array<{ name: string; isa?: (special: TDispatch, general: TDispatch) => boolean; }>; throw?: boolean; ignoreArity?: boolean; } export interface Dispatcher { name: string; override(types: TDispatch[], callback: (...types: TDispatch[]) => TReturn): boolean; dispatch(...types: TDispatch[]): TReturn | null; } export interface DispatchHandler { types: TDispatch[]; handler: (...types: TDispatch[]) => TReturn; }