You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TypeScript中实现事件与对应处理器的强类型Map?

TypeScript 实现强类型事件-处理器 Map

可以为Map的每个键值对建立类型关联,通过TypeScript的泛型与映射类型就能实现需求,以下是具体方案:

定义强类型Map类型

先声明事件类与对应处理器的类型映射,再基于此构建强类型Map:

// 定义事件到处理器的类型映射表
type EventHandlerMapping = {
  [EventA]: (event: EventA) => void;
  [EventB]: (event: EventB) => void;
};

// 构建强类型Map,重写get/set方法确保键值类型关联
type EventToHandlerMap = Map<keyof EventHandlerMapping, EventHandlerMapping[keyof EventHandlerMapping]> & {
  get<K extends keyof EventHandlerMapping>(key: K): EventHandlerMapping[K] | undefined;
  set<K extends keyof EventHandlerMapping>(key: K, value: EventHandlerMapping[K]): this;
};

验证类型检查效果

将上述类型加入代码后:

  • 正确的事件-处理器映射可通过检查:
const map: EventToHandlerMap = new Map([
  [EventA, handleA],
  [EventB, handleB]
]); // ✅ 类型检查通过
  • 错误的映射会触发类型报错:
const map: EventToHandlerMap = new Map([
  [EventA, handleB],
  [EventB, handleA]
]); // ❌ 类型检查失败,提示handleB无法匹配EventA对应的处理器类型

原理说明

  • EventHandlerMapping 明确了每个事件类对应的处理器类型,直接建立键与值的强关联关系。
  • 重写Map的get和set方法后,TypeScript会根据键的具体类型,自动校验对应值的类型是否匹配,从根源上避免错误的映射。

内容的提问来源于stack exchange,提问作者alaboudi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:27:54