import { type Tg } from './event'; import { type CoordTypeSupplier } from './lat-lng'; import type { AbstractMapEventMap, BaseMap } from './map/map'; import type { UnionBaiduEventTarget, UnionGoogleEventTarget, UnionTalksEventTarget } from './unions'; /** * 移除事件监听的函数 * * 实现{@link EventTarget}有点复杂, 对于简单的情况, 实现一个设置监听的函数+返回{@link RemoveEventListenerFunction}就够了 * @see addBaiduEventListener * @see addGoogleEventListener * */ export interface RemoveEventListenerFunction { (): void; } export declare function addGoogleEventListener(target: UnionGoogleEventTarget, type: string, listener: (...args: any[]) => void): RemoveEventListenerFunction; export declare function addBaiduEventListener(target: UnionBaiduEventTarget, type: string, listener: (...args: any[]) => void): RemoveEventListenerFunction; export declare function addTalksEventListener(target: UnionTalksEventTarget, type: string, listener: (...args: any[]) => void): RemoveEventListenerFunction; export declare function addHtmlEventListener(target: T, type: K, listener: (this: T, ev: EventMap[K]) => any, options?: AddEventListenerOptions | boolean): RemoveEventListenerFunction; export declare function addTgEventListener(target: T, type: K, listener: (this: T, ev: EventMap[K]) => any): RemoveEventListenerFunction; export interface EventTargetDelegate extends Tg.EventTarget { setTarget(target: Tg.EventTarget): this; } /** * ## Delegate(代理) VS Mixin(混合) * Delegate相对于Mixin的优点是调用路径更明确, 缺点是js/ts原生不支持, 需要写样板代码 */ export declare abstract class AbstractEventTargetDelegate implements EventTargetDelegate { protected inner: T; protected coordTypeSupplier: CoordTypeSupplier; protected eventMap: Map; protected target: Tg.EventTarget; constructor(inner: T, coordTypeSupplier: CoordTypeSupplier); setTarget(target: Tg.EventTarget): this; abstract addEventListener(type: string, listener: Tg.EventListener): void; abstract removeEventListener(type: string, listener: Tg.EventListener): void; } export declare class EventHubEventTargetDelegate implements EventTargetDelegate { private delegate; private options; private eventHub; constructor(delegate: EventTargetDelegate, options: { /** 由{@link eventHub}手动处理的事件 */ types: EventTypes[]; /** 用户开始监听{@link type} */ onListen: (type: EventTypes) => void; /** 用户结束监听{@link type} */ onCancel: (type: EventTypes) => void; }); notify(event: Tg.Event): void; hasListener(type: EventTypes): boolean; setTarget(target: Tg.EventTarget): this; addEventListener(type: string, listener: Tg.EventListener): void; removeEventListener(type: string, listener: Tg.EventListener): void; } export declare class GoogleEventTargetDelegate extends AbstractEventTargetDelegate { private static EVENT_TYPE_MAP; addEventListener(type: string, listener: Tg.EventListener): void; removeEventListener(type: string, listener: Tg.EventListener): void; } export declare class BaiduEventTargetDelegate extends AbstractEventTargetDelegate { private static EVENT_TYPE_MAP; addEventListener(type: string, listener: Tg.EventListener): void; removeEventListener(type: string, listener: Tg.EventListener): void; } export declare class TalksEventTargetDelegate extends AbstractEventTargetDelegate { static EVENT_TYPE_MAP: { 'center-changed': string; 'zoom-changed': string; tilesloaded: string; 'map-type-changed': string; } & Record; private eventTypeMap; /** * @param eventTypeMap 额外的事件类型映射 */ constructor(inner: T, coordTypeSupplier: CoordTypeSupplier, eventTypeMap?: Record); addEventListener(type: string, listener: Tg.EventListener): void; removeEventListener(type: string, listener: Tg.EventListener): void; } /** 手动维护事件 */ export declare class EventHub implements Tg.EventTarget { private typeMap; addEventListener(type: string, listener: Tg.EventListener): void; removeEventListener(type: string, listener: Tg.EventListener): void; hasListener(type: string): boolean; notify(event: Tg.Event): void; } //# sourceMappingURL=event-target.d.ts.map