tg-map-vue3
Version:
封装 百度地图, Google地图, Here地图(未完成) 的Vue3组件库
47 lines (46 loc) • 1.71 kB
TypeScript
import type { LatLng } from './lat-lng';
/**
* ## 事件机制对比
* - 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;
}
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<THIS extends EventTarget, MAP extends {
[k: string]: Event;
}> extends EventTarget {
addEventListener<K extends keyof MAP>(type: K, listener: (this: THIS, event: MAP[K]) => void): void;
removeEventListener<K extends keyof MAP>(type: K, listener: (this: THIS, event: MAP[K]) => void): void;
}
}
export declare function bindEvents(listeners: Record<string, unknown>, target: Tg.EventTarget, 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;