⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

使用型变实现类型安全的事件发射器

利用协变与逆变的型变规则,构建一个支持emit和on方法且事件类型与回调参数完全匹配的事件系统。 · 难度:入门 · +10XP

使用型变实现类型安全的事件发射器

事件发射器的核心难点在于不同类型的事件携带不同的参数列表。本教程将利用映射类型和函数类型的逆变性质,实现一个类型安全的事件系统:on方法注册的回调参数类型必须与emit发出的参数类型一致。同时展示如何利用逆变/协变规则确保子事件类型的兼容性。

type EventMap = {
  data: [id: number, name: string];
  error: [code: number, message: string];
  end: [];
};

class TypedEmitter<T extends Record<string, any[]>> { private listeners = new Map<keyof T, Function[]>();

on<E extends keyof T>(event: E, callback: (...args: T[E]) => void): void { // 逆变:回调参数类型必须更宽或相同 }

emit<E extends keyof T>(event: E, ...args: T[E]): void { // 协变:发出参数必须精确匹配 } }

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 200 篇
0 完成
🔥 0