Typescript. С каким типом передать callback как параметр функции?

Я пытаюсь создать функцию для добавления слушателя событий к элементу HTML. Когда я передаю callback как параметр функции с типом Function, то typescrypt показывает следующую ошибку в месте добавления слушателя, хотя все работает отлично. Ради эксперемента создал setTimeout с этой функцией, проблем не обнаружено. Если тип сменить с Function на any, то ошибки нет, но это не выход из ситуации, хочется разобраться в чём проблема.

S2769: No overload matches this call.
Overload 1 of 2, '(type: keyof HTMLElementEventMap, listener: (this: HTMLElement, ev: Event | ClipboardEvent | UIEvent | AnimationEvent | MouseEvent | ... 12 more ... | WheelEvent) => any, options?: boolean | AddEventListenerOptions): void', gave the following error.
Argument of type 'string' is not assignable to parameter of type 'keyof HTMLElementEventMap'.
Overload 2 of 2, '(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void', gave the following error.
Argument of type 'Function' is not assignable to parameter of type 'EventListenerOrEventListenerObject'. 
Property 'handleEvent' is missing in type 'Function' but required in type 'EventListenerObject'
function on(type: string, callback: Function) {
  const el = document.getElementById('app')
  el.addEventListener(type, callback) # Ошибка TS2769: No overload matches this call.
  setTimeout(callback, 2000) # Нет ошибки
}

on('click', () => {
  console.log('Click')
})


Ответы (0 шт):