Как определить callback в Typescript и передать значение в виде функции по умолчанию

Есть метод:

setOverlayTimer(
  overlay: boolean,
  time = 1000,
  callback = function() {}
): ReturnType<typeof setTimeout> {
  return setTimeout(() => {
    this.setVOverlay(overlay);

    callback();
  }, time);
}

При комплиции получаю ошибку:

error Unexpected empty function @typescript-eslint/no-empty-function

Пробовал сделать callback = () => {} и так callback: () => any. Возникают другие проблемы. TS начинает требовать 3 параметра. Как указать, чтот ожидается тип Function и передать по умочанию функцию, чтобы не вылетала ошибка TS2722: Cannot invoke an object which is possibly 'undefined'.?

UPD TS 3.9.*


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

Автор решения: Не быть рабом на Руси

По простому можно сделать так:

setOverlayTimer(
  overlay: boolean,
  time = 1000,
  callback: () => any = () => undefined
): ReturnType<typeof setTimeout>

Можно явно указать тип возвращаемого занчения в callback:

setOverlayTimer(
  overlay: boolean,
  time = 1000,
  callback: () => string = () => ''
): ReturnType<typeof setTimeout>

Можно указать, что callback не должен ничего возвращать:

setOverlayTimer(
  overlay: boolean,
  time = 1000,
  callback: () => void = () => undefined
): ReturnType<typeof setTimeout>
→ Ссылка
Автор решения: Alexander Yukal

А что не так с типом Function?

function setOverlayTimer(
  overlay: boolean,
  time: number = 1000,
  callback: Function = function() {}
)

Ошибка Unexpected empty function возникает из-за отсутсвия некоторых настроек ESLint:

{ "allow": ["functions"] }
{ "allow": ["arrowFunctions"] }
{ "allow": ["generatorFunctions"] }
// и т.д.

Подробней здесь: ESLint no-empty-function

→ Ссылка