TypeScript 错误 TS2339:“EventTarget”类型上不存在属性“matches”

2023-11-29

我收到一个我无法从 TypeScript 中理解的错误。我正在使用一段完全有效的 JavaScript,但它在我的 IDE 中以及通过 Gulp 进行预处理期间都标记了错误。

我已将其剥离回其核心,但仍然收到错误(即使这是完全有效的 JS).

document.addEventListener('click', function (event) {
    console.log(event.target.matches('.click-me'));
}, false);

TypeScript 编译失败并出现以下错误:

error TS2339: Property 'matches' does not exist on type 'EventTarget'.

我已经检查了我的 TypeScript 选项,它们应该允许我毫无问题地使用“匹配”。

let tscOptions = {
    allowSyntheticDefaultImports: true,
    target: "es5",
    lib: [
        "dom",
        "es7",
        "scripthost",
        "es2017"
    ],
    module: "commonjs"
};

我使用的是 TypeScript 4.1.2 版本和 Gulp Typescript v6.0.0-alpha.1。

显然是某个地方的配置问题,但我不知道在哪里。


首先 - 这取决于你如何定义有效的 JS!是的 - 你的 JS 会(几乎所有?)一直工作,但这并不意味着它能保证 100% 的时间。

这里的问题是 .matches 是 Element 类型的对象的属性。 event 可以为 null - 并且 event.target 可以为 null 或 EventTarget。

Element(您想要的类型)扩展了 Node 类型,而 Node 类型又扩展了 EventTarget 类型。因此,不能保证您得到您期望的类型,因此 TS 警告您是正确的。

然而,忽略这些警告可能非常适合您的用例 - 在这种情况下您可以直接转换它:


document.addEventListener('click', function (event) {
    if (event !== null && event.target !== null) {
       const element = event.target as Element;

       const isMatch = element.matches('foo');
    }
}, false);

在我看来,编写大量逻辑来验证每个边缘情况并没有多大意义 - 但您可以在此处了解有关该问题的更多信息:https://github.com/Microsoft/TypeScript/issues/29540

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript 错误 TS2339:“EventTarget”类型上不存在属性“matches” 的相关文章

随机推荐

  • 如何避免正则表达式中的灾难性回溯?

    我正在尝试为字符串测试创建正则表达式 基本上我想要的是something something a gt TRUE abc gt TRUE a b gt TRUE gt FALSE a gt FALSE b gt FALSE 于是这个正则表达
  • Google Play 游戏和个人资料图片

    最近 Google Play 游戏更新了他们的服务 无需 Google 帐户即可运行 而是玩家创建自己的昵称 并选择个人资料图片 我究竟如何加载此个人资料图片以显示它 之前我用过getIconImageUri of Player class
  • 什么是自定义 jvm 属性?

    我是 Java 新手 我遇到过术语 自定义 JVM 属性 以及如何在 Eclipse 中使用自定义 JVM 属性运行配置 我想了解它到底是什么以及它如何帮助我作为一名程序员 jvm 属性 概念是一种在 JVM 范围内创建属性 名称 值对 的
  • 这个 Swift TimeZone 作为另一个时区假设中的日期缩写有​​什么问题?

    在具有以下 Swift 代码的 Xcode Playground 中 我得到了带注释的输出 给定 MST TimeZone 对象和该 MST TimeZone 的 MDT TimeZone 中的日期 我没有收到预期的 MDT TimeZon
  • 从 Javascript 代码中隐藏 Excel 选项卡

    如何通过 Javascript 以编程方式隐藏 Excel 选项卡 ExcelSheetName Visible False 似乎不起作用 我用谷歌搜索了很多 但还没有收到正确的解决方案 怎么做 要隐藏 Excel 工作表 请设置Visib
  • 用 csv.DictWriter 写入部分行?

    我有一个包含一组输入的 CSV 文件 Example A B C D 我想分析结果并为每一行输出一个 CSV 文件 例如 B C The DictReader构建完整的字典 其中包含键 A B C D The DictWriter按预期设置
  • #define _UNICODE 不适用于 MinGW + CodeBlocks

    通常我使用 Visual Studio 但我切换到 mingw 我喜欢使我的应用程序可以轻松地从 unicode 和多字节更改 在我的 mingw 项目中我有我的定义并包含如下内容 define WIN32 LEAN AND MEAN de
  • 解析多个配置文件的最佳实践

    解析多个配置文件的最佳实践是什么 如果有的话 我想解析mysql服务器配置并重新编写配置 该配置允许发出多行 例如 includedir etc mysql d 有趣的是 某些配置可能位于主文件中 但其他配置可能位于子文件中 我认为 pyp
  • 使用 PHP 将 URL 中的空格替换为 %20

    我希望用 20 替换 url 中的所有空格实例 我将如何使用正则表达式做到这一点 谢谢你 如果您只想用另一个字符串替换一段字符串 则无需使用正则表达式 使用str replace 应该绰绰有余 new str replace 20 your
  • Django:如何让 South 为添加到 INSTALL_APPS 的第三方应用程序创建表?

    我正在尝试使用django 图像裁剪器 Link 在我的项目中 我将其添加到settings py中的INSTALL APPS中并成功解决 该应用程序需要一些数据库表才能使用 所以我必须创建它们 由于我一直在使用 South 因此我需要使用
  • iOS 库到 BitCode

    我最近下载了 Xcode 7 beta Xcode 抱怨我的一些 C 库没有编译成 BitCode 我该如何告诉 Clang 生成与 iOS 兼容的 BitCode 我在 stackoverflow 上看到过类似的答案 但我不知道它们是否适
  • 如何将元组数据提取为单元素格式

    我从以下内容中得到了良好的结果 但是如何从元组中提取该数据 换句话说 如何清理数据 这是数据库里的数据 我跑出来了 gt gt gt policy id 2309L 118L 94L gt gt gt for i in policy id
  • Visual Studio代码EPERM操作不允许

    每次我尝试在 vsc 上安装新扩展时 我都会得到 Error while loading extensions EPERM operation not permitted 接下来它告诉我打开一个 obsolete 文件 但它告诉我的文件路径
  • 在没有 Java EE 应用服务器的情况下使用 Web 服务在 C# 和 Java 之间进行互操作?

    我的处境很困难 我们有一个公开基于 Java 的 API 的第三方企业系统 然而 我们是一个100 Net 导向的开发团队 本质上 我需要用 C 代码可以调用的东西来包装 Java API Web 服务固然很棒 但我们的基础设施上唯一支持的
  • 从网址中删除 web/app_dev.php/

    我已经在 symfony 2 中完成了我的应用程序 现在我想从网址中删除 web app dev php 我读到了这一点 并在这样做之后 php app console cache clear env prod no debug 并添加 h
  • 创建 libcurl http post 表单

    我如何创建一个curl form 例如在stackoverflow上发帖 如果我查看问题表单页面的来源 我会看到
  • 有没有办法获取队列中的最后一个元素?

    我知道堆栈是最好也是最简单的方法 但是是否有可能获得队列中的最后一个元素而无需将任何内容出列 您可以简单地执行以下操作 Assumes T is a reference type if it s a value type then you
  • 删除文本文件中的特定行

    我正在研究一个选项 如果用户输入确切的标题和作者 该选项将能够删除指定的行 但是我无法让它发挥作用 我的功能内容如下所示 fnRemoveBook echo Title read Title echo Author read Author
  • 如何在java中从tcp流播放声音

    还有另一个应用程序在此套接字上写入原始 wav 文件 客户端启动并开始收听当前正在播放的歌曲 Socket clientSocket new Socket localhost 9595 AudioInputStream stream Aud
  • TypeScript 错误 TS2339:“EventTarget”类型上不存在属性“matches”

    我收到一个我无法从 TypeScript 中理解的错误 我正在使用一段完全有效的 JavaScript 但它在我的 IDE 中以及通过 Gulp 进行预处理期间都标记了错误 我已将其剥离回其核心 但仍然收到错误 即使这是完全有效的 JS d