import type { LatLng } from './lat-lng'; import type { Point } from './types'; /** * ## 事件机制对比 * - DOM: add/removeEventListener, Event {type, target} * - Vue: $on/$off, 没有Event, listener直接接收数据 * - baidu: 模仿DOM * - here: 模仿DOM * - google: addListener+remove, 没有Event, listener直接接收数据 * * 综合对比之后, 决定模仿DOM的事件机制 */ export declare namespace Tg { interface Event { type: string; target: EventTarget; originalEvent?: any; } interface MouseEvent extends Event { /** 经纬度 */ position: LatLng; /** 屏幕坐标 */ pixel: Point; } interface EventListener { (this: EventTarget, event: Event): void; /** 唯一id */ __id__?: number; } interface EventTarget { addEventListener(type: string, listener: EventListener): void; removeEventListener(type: string, listener: EventListener): void; } /** * 带事件的类型信息, 只能监听指定的事件 * @see EventTarget * */ interface EventTargetTyped extends EventTarget { addEventListener(type: K, listener: (this: THIS, event: MAP[K]) => void): void; removeEventListener(type: K, listener: (this: THIS, event: MAP[K]) => void): void; } /** 带事件的类型信息, 可以监听任何事件 */ type EventTargetTyped2 = EventTargetTyped & EventTarget; } export declare function bindEvents(listeners: Record, target: Tg.EventTarget, emit: undefined | ((eventName: any, event: any) => void), excludes?: string[]): void; export declare function generateNextEventListenerId(): number; /** * JS的Map/object的key都不支持自定义hashCode()/equals(), 故只能生成字符串当作key */ export declare function generateEventKey(type: string, listener: Tg.EventListener): string; //# sourceMappingURL=event.d.ts.map