VSCode IntelliSense无法自动完成JavaScript DOM事件和方法 [英] VSCode IntelliSense does not autocomplete JavaScript DOM events and methods

查看:548
本文介绍了VSCode IntelliSense无法自动完成JavaScript DOM事件和方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Visual Studio Code版本1.17.1.

I am using Visual Studio Code version 1.17.1.

*.js文件中,当我键入document.querySelector("#elementId").style.时,我没有样式(如边距,显示等)的IntelliSense提示. 在document.querySelector("#elementId").

In *.js file when I type document.querySelector("#elementId").style. I have no IntelliSense hints for styles (like margin, display, etc.). Even no onclick event hint after document.querySelector("#elementId").

我不使用任何npm软件包.这只是简单的html \ css \ js项目.

I don't use any npm packages. It is just simple html\css\js project.

如何打开正确的IntelliSense提示?谢谢.

How to turn on correct IntelliSense hints? Thanks.

推荐答案

因为querySelector的结果是:

元素-最通用的基类或null

如果您已经知道ID,则可以使用 document.getElementById ()-返回更具体类的实例- HTMLElement -自动完成功能将按预期运行.

If you already know id you can use document.getElementById() - which returns instance of more specific class - HTMLElement - autocomplete will work as expected.

document.getElementById('elementId').

如果您不知道ID,但想要自动完成,则可以使用 JSDoc类型注释:

If you don't know id, but want autocomplete you can use JSDoc type annotations:

/** @type {HTMLElement} */
var el =  document.querySelector(".myclass");

el.

// or without extra variable:
/** @type {HTMLElement} */
(document.querySelector(".myclass")).

我还没有真正测试过,但是您可以尝试以下方法:

I haven't really tested it but you can try something like that:

/**
 * @type {function(string): HTMLElement}
 */
var querySelector = document.querySelector.bind(document);

querySelector('.myclass').

另一种选择是改变打字稿类型:

Another choice would be alter typescript types:

  1. 创建文件dom.d.ts
  2. 附加到它:

interface NodeSelector {
    querySelector<K extends keyof ElementTagNameMap>(selectors: K): ElementTagNameMap[K] | null;
    querySelector<E extends HTMLElement = HTMLElement>(selectors: string): E | null;
    querySelectorAll<K extends keyof ElementListTagNameMap>(selectors: K): ElementListTagNameMap[K];
    querySelectorAll<E extends HTMLElement = HTMLElement>(selectors: string): NodeListOf<E>;
}

现在querySelector返回HTMLElement.

Now querySelector returns HTMLElement.

这篇关于VSCode IntelliSense无法自动完成JavaScript DOM事件和方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆