Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

main-event

achingbrain0Apache-2.0 OR MIT1.0.1TypeScript support: included

Typed event emitters

readme

main-event

codecov CI

Typed event emitters

About

Adds types to the EventTarget class.

Hopefully this won't be necessary forever:

In addition to types, a safeDispatchEvent method is available which prevents dispatching events that aren't in the event map, and a listenerCount method which reports the number of listeners that are currently registered for a given event.

Example

import { TypedEventEmitter } from 'main-event'
import type { TypedEventTarget } from 'main-event'

interface EventTypes {
  'test': CustomEvent<string>
}

const target = new TypedEventEmitter<EventTypes>()

// it's a regular EventTarget
console.info(target instanceof EventTarget) // true

// register listeners normally
target.addEventListener('test', (evt) => {
  // evt is CustomEvent<string>
})

// @ts-expect-error 'derp' is not in the event map
target.addEventListener('derp', () => {})

// use normal dispatchEvent method
target.dispatchEvent(new CustomEvent('test', {
  detail: 'hello'
}))

// use type safe dispatch method
target.safeDispatchEvent('test', {
  detail: 'world'
})

// report listener count
console.info(target.listenerCount('test')) // 0

// event emitters can be used purely as interfaces too
function acceptTarget (target: TypedEventTarget<EventTypes>) {
  // ...
}

Install

$ npm i main-event

Browser <script> tag

Loading this module through a script tag will make its exports available as MainEvent in the global namespace.

<script src="https://unpkg.com/main-event/dist/index.min.js"></script>

License

Licensed under either of

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

changelog

1.0.1 (2025-06-03)

Bug Fixes

  • override setMaxListeners for react native (515fd51)

1.0.0 (2025-06-01)

Features