我得到了一个错误,我只是无法理解从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。
这显然是某个地方的配置问题,但我不知道在哪里。
1条答案
按热度按时间pxyaymoc1#
首先-这取决于你如何定义有效的JS!是的-你的JS将工作(几乎所有?)的时间,但这并不意味着它保证100%的时间。
这里的问题是.matches是Element. event类型对象的属性,可以为null,而event.target可以为null或EventTarget。
一个Element(你想要的类型)扩展了Node类型,Node类型扩展了EventTarget类型。所以,你不能保证得到你想要的类型,所以TS警告你是正确的。
然而,忽略这些警告可能非常适合您的用例-在这种情况下,您可以直接将其转换为:
为每个边缘情况编写大量逻辑来验证IMO并没有太大意义-但您可以在此处了解有关该问题的更多信息:https://github.com/Microsoft/TypeScript/issues/29540