# EventHub | 事件

易用的事件中心，保持性能

```ts
import { EventHub } from "syscore"

let eventHub = new EventHub()
let closer = eventHub.on("eventType", (data) => {})
eventHub.emit("eventType", "data")
closer()
```

## 支持定义事件类型

```ts
let eventHub = new EventHub<{
    network: { e: number; xx: string }
    click: { s: number }
}>()

eventHub.emit("update", { itemId: "", index: 0 }) // ok
eventHub.emit("update", { itemId: "", index: "1" }) // error index type error

eventHub.on("update", (data) => {
    data.itemId // string type hint
    data.index // number type hint
})
```

## 返回取消监听函数

除了可以用 `off` 方法取消监听，还可以使用注册监听时返回的函数来取消监听

```ts
let closer = eventHub.on("eventType", (data) => {})
closer() // 取消监听
```

## 支持事件名路径

```ts
eventHub.on("file", (e) => {}) // 监听器 A
eventHub.on("file/new", (e) => {}) // 监听器 B

eventHub.emit("file") // 监听器 A、B 都会触发
eventHub.emit("file/new") //监听器 B 会触发
```

## 性能

```js
emit 事件触发性能:

`RawEvents`:
  46 867 667 ops/s, ±0.68%   | fastest
`EventHub noTypePath`:
  46 757 563 ops/s, ±0.62%   | 0.23% slower
`eventemitter3`:
  38 317 534 ops/s, ±0.85%   | 18.24% slower
`EventHub with path`:
  33 922 677 ops/s, ±2.24%   | 27.62% slower
`mitt`:
  17 842 856 ops/s, ±2.85%   | slowest, 61.93% slower

```
