thsc-datav-standard-chart
Version:
标准范式组件
51 lines (50 loc) • 1.73 kB
TypeScript
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 {};