沉默Visual Studio代码中的问题

时间:2018-12-03 22:53:47

标签: typescript visual-studio-code eslint lint tslint

在我的项目中,我有一些代码可以检查(对于不同的浏览器)支持哪种鼠标滚轮,以便我们可以正确添加事件侦听器。这是它的外观:

const support = 'onwheel' in document.createElement('div') 
? 'wheel'
: document.onmousewheel !== undefined 
    ? 'mousewheel'
    :'DOMMouseScroll';

有效。但是,我最近切换到使用Visual Studio Code,现在存在一个常量问题

  

“文档”类型上不存在属性“ onmousewheel”。

这是有效且有用的错误。但是,在这种情况下,我想忽略它,因为这就是我要检查的内容。

enter image description here

有什么办法可以仅在此行上忽略此问题吗?在使用TypeScript时,我尝试了// tslint:disable-line,但我认为这是VS Code本身。任何帮助表示赞赏。

enter image description here

1 个答案:

答案 0 :(得分:1)

您正在看到此问题,因为DOM的内置TypeScript类型(由于存储它们的文件名,通常称为lib.dom.d.ts)没有声明{{1} }属性存在于onmousewheel类型上。全局变量Document被声明为类型document。但是,它显然确实存在于Document上。您可以将代码切换为window吗?

如果确定必须具有window.onmousewheel,则可以制作一个新文件(我们将其命名为document.onmousewheel)并声明typings/lib.custom.d.ts接口还有一个Document属性:

onmousewheel

请注意,此文件不能interface Document { onmousewheel: ((this: Document, ev: Event) => any) | null; } import任何东西:它是要声明一个全局可用的接口export,该接口会将类型添加到任何预先存在的全局可用的接口中Document

注意:尝试tslint:disable在这里什么也不做,因为您遇到的错误是TypeScript。 TSLint在TypeScript之上提供了额外的检查层,但是由于此错误本身就是TypeScript,因此这不是一个因素。您可能会想到@ts-ignore。但是,应该很少(如果有的话)使用它,并且只能作为最后的手段。与完全禁用一行的TypeScript相比,正确告知类型系统某种方式(如上面带有添加的Document接口属性的方式)要好得多。在一行上禁用TypeScript可以忽略其他有效错误。