I'm trying to migrate my project from a javascript to a typescript and have a problem with migrating class for handling events.

To avoid double describing options for an add/remove event listener we use a wrapper like this:

```
constructor() {
  this.windowResizeHandler = new MyEventHandler(
    target: window,
    event: 'resize',
    handler: e => this.handleResize_(e),
    options: {passive: true, capturing: true},
  );
} 

connectedCallback() {
  this.windowResizeHandler.add();
}

disconnectedCallback() {
  this.windowResizeHandler.remove();
}

```

Now i don't know how to write this in typescript without loosing information about events typing. For example:

```
document.createElement('button').addEventListener('click', e => {
  // Here e is MouseEvent.
});

```

But if I write my wrapper like:

```
interface EventHandlerParams {
  readonly target: EventTarget;
  readonly event: Event;
  readonly listener: (e: Event) => void;
  readonly params: AddEventListenerOptions;
}

export class EventHandler {
  public constructor(params: EventHandlerParams) {}
}

```

Then I loose typings:

```
new MyEventHandler(
  target: document.createElement('button'),
  event: 'click',
  handler: e => { /* Here e is just Event not MouseEvent */ },
  options: {passive: true, capturing: true},
);

```

Is there any options for me to use event typings from `lib.dom.d.ts` here?