TypeScript: 'handleFirstTab' использовался до того, как он был определен @ typescript-eslint / no-use-before-define - PullRequest
1 голос
/ 18 апреля 2020

У меня есть следующий код в компоненте React, и TypeScript выдает следующую ошибку:

'handleFirstTab' was used before it was defined @typescript-eslint/no-use-before-define

Если я разделю обе функции на отдельные файлы и импортирую их друг в друга, тогда ошибка уходит. Есть ли способ, с помощью которого я могу иметь обе функции в одном файле без отключения @typescript-eslint/no-use-before-define, и ошибка будет go. Спасибо.

  const handleMouseDownOnce = (): void => {
    document.body.classList.remove('user-is-tabbing')
    window.removeEventListener('mousedown', handleMouseDownOnce)
    window.addEventListener('keydown', handleFirstTab)
  }

  const handleFirstTab = (e: KeyboardEvent): void => {
    if (e.code === 'Tab') {
      document.body.classList.add('user-is-tabbing')
      window.removeEventListener('keydown', handleFirstTab)
      window.addEventListener('mousedown', handleMouseDownOnce)
    }
  }

1 Ответ

0 голосов
/ 19 апреля 2020

, когда вы определяете переменную (или функцию), используя const или let, это не будет Hoist как объявление функции с использованием ключевого слова function или с использованием var

, если вы хотите чтобы они оба были в одном файле, вам нужно изменить код следующим образом:

  function handleMouseDownOnce(): void {
    document.body.classList.remove('user-is-tabbing')
    window.removeEventListener('mousedown', handleMouseDownOnce)
    window.addEventListener('keydown', handleFirstTab)
  }

  function handleFirstTab(e: KeyboardEvent): void{
    if (e.code === 'Tab') {
      document.body.classList.add('user-is-tabbing')
      window.removeEventListener('keydown', handleFirstTab)
      window.addEventListener('mousedown', handleMouseDownOnce)
    }
  }
...