【发布时间】:2020-08-01 07:29:40
【问题描述】:
我在 React 组件中有以下代码,TypeScript 给出以下错误:
'handleFirstTab' was used before it was defined @typescript-eslint/no-use-before-define
如果我将两个函数拆分为单独的文件并将它们相互导入,那么错误就会消失。有没有一种方法可以让我在同一个文件中同时拥有这两个函数而不禁用@typescript-eslint/no-use-before-define,并且错误会消失。谢谢。
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)
}
}
【问题讨论】:
-
除非你想为这个特定的实例添加一个 ESLint 禁用注释,否则你在同一个文件中定义这些函数的任何方式都将违反 ESLint 规则,因为无论你先声明哪个,它将始终引用未定义的第二个函数。我不知道你的完整实现,但可能值得考虑一种方法来重构这两种方法,这样它们就不会相互引用。
-
您是否尝试过使用函数声明 (
function handleMouseDownOnce() { ... }) 而不是函数表达式 (const handleMouseDownOnce = () => { ... })? -
谢谢,@Shlang 我已经尝试过函数声明,但没有帮助。
标签: typescript types type-conversion