Gulp 类型脚本错误TS2339:类型'EventTarget'上不存在属性'matches'

7lrncoxx  于 2022-12-08  发布在  Gulp
关注(0)|答案(1)|浏览(348)

我得到了一个错误,我只是无法理解从TypeScript。我正在使用一个完全有效的JavaScript片段,但它的标记一个错误,无论是在我的IDE和通过Gulp预处理。
我已经将其剥离回其核心,但仍然出现错误(即使这是perfectly valid 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"
};

我使用的是4.1.2版的TypeScript和6.0.0版的Gulp Typescript。
这显然是某个地方的配置问题,但我不知道在哪里。

pxyaymoc

pxyaymoc1#

首先-这取决于你如何定义有效的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);

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

相关问题