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 }