UNPKG

thsc-datav-standard-chart

Version:

标准范式组件

51 lines (50 loc) 1.73 kB
type EventDefinition = Record<string, (...args: unknown[]) => unknown>; export type Query<H extends EventDefinition[string] = EventDefinition[string]> = { [Key in keyof Parameters<H>[0]]: Parameters<H>[0][Key] | Parameters<H>[0][Key][]; } | ((...args: Parameters<H>) => boolean); export type Option = { /** 上下文 */ context?: unknown; /** 仅触发一次 */ once?: boolean; }; /** * 事件触发器 */ export default class EventEmitter<EvtDef extends EventDefinition = EventDefinition> { private __handlersMap; constructor(); /** * 判断有没有相关事件类型 */ hasType(eventType: string): boolean; /** * 注册事件 * * @example * ```js * on(eventType, handler, option?) * on(eventType, query, handler, option?) * ``` */ on<K extends keyof EvtDef, ARG1 extends EvtDef[K] | Query<EvtDef[K]>, ARG2 = ARG1 extends EvtDef[K] ? Option : EvtDef[K], ARG3 = ARG2 extends Option ? never : Option>(eventType: K, arg1: ARG1, arg2?: ARG2, arg3?: ARG3): this; /** * 注册事件(仅触发一次) * * @example * ```js * once(eventType, handler, option?) * once(eventType, query, handler, option?) * ``` */ once<K extends keyof EvtDef, ARG1 extends EvtDef[K] | Query<EvtDef[K]>, ARG2 = ARG1 extends EvtDef[K] ? Option : EvtDef[K], ARG3 = ARG2 extends Option ? never : Option>(eventType: K, arg1: ARG1, arg2?: ARG2, arg3?: ARG3): void; /** * 取消事件 */ off<K extends keyof EvtDef>(eventType: K, handler: EvtDef[K]): this; /** * 触发事件 */ emit<K extends keyof EvtDef>(eventType: K, ...args: Parameters<EvtDef[K]>): void; } export {};