You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@typescript-eslint/no-misused-promises移除异步事件处理器误报及禁用合理性问询

问题分析与解决方案

你这里的操作没有错误,属于TypeScript ESLint规则的误报。

规则核心逻辑

@typescript-eslint/no-misused-promises规则的设计初衷,是防止把返回Promise的函数当作同步回调传入(比如addEventListener时用async函数,浏览器会忽略返回的Promise,若函数内抛出错误会变成未捕获的Promise rejection)。但该规则的实现没区分addEventListener和removeEventListener的场景——removeEventListener只是传入函数引用用于匹配移除,并不会执行这个函数,所以函数是否返回Promise完全不影响这里的逻辑。

合理禁用理由

你可以用eslint-disable-next-line注释并附上清晰理由,示例如下:

// eslint-disable-next-line @typescript-eslint/no-misused-promises
// 移除事件监听器仅传入函数引用,不会执行该函数,无需关注返回值类型
button.removeEventListener("click", hideAndUnmountSnackbar);

额外优化建议

如果想从根源避免这类误报,可以给异步事件处理函数包一层同步wrapper,添加和移除监听器时都用这个引用:

const handleClick = () => {
  hideAndUnmountSnackbar().catch(err => console.error(err));
};

button.addEventListener("click", handleClick);
// 移除时不会触发规则报错
button.removeEventListener("click", handleClick);

这样既符合规则要求(添加监听器用同步函数),又能正确处理异步函数的错误,同时移除操作也不会再触发误报。

内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:33:13