我正在使用Visual Studio Code和JavaScript进行Web开发项目。在我的代码中,我有一个函数,它创建一个新的div元素并将其分配给一个名为newDiv
的变量。下面是代码:
function createNode(tag,id) {
let newNode = document.createElement(tag)
newNode.id = id;
return newNode;
}
let newDiv = createNode("div", "identificador1");
但是,当我在代码编辑器中键入“newDiv.”时,VS Code并没有为newDiv
提供任何方法或属性,即使它是一个div元素。
我希望看到一个可用方法的列表,例如classList
、getAttribute
和appendChild
,但是什么也没有出现。
我尝试了以下解决方案:
- 重新启动VS代码
- 检查我是否正确键入了句点(“.”)
- 检查是否有错别字。
- 将
newDiv
的类型显式指定为HTMLDivElement
可以工作,VS Code开始提供方法,但单词“as”导致Uncaught SyntaxError。如下所示:
let newDiv = createNode("div", "identificador1") as HTMLDivElement;
这些解决方案对我都不起作用。有人能帮助我理解为什么VS Code没有提供newDiv
的方法,以及我如何解决这个问题吗?
1条答案
按热度按时间zbsbpyhn1#
你还没有做任何事情来告诉静态分析你的函数的预期输入类型。在VS Code中,你可以用JS Doc annotations为JavaScript做这件事:
由TypeScript支持的VS Code的静态分析现在将能够基于输入类型注解和函数体推断返回类型。(它将建议
HTMLElementTagNameMap
中所有类型值的intersection type,因为没有泛型它不能做得更好)。如果你想要确切的HTMLDivElement
类型,你必须使用/**@type {HTMLDivElement}*/ let newDiv = createNode(...);
提示它。如果你能在JS Doc中使用更好的泛型(TypeScript有),你就能得到更好的返回类型推断。目前VS Code似乎还不太支持类型注解中的TypeScript泛型。我尝试了以下方法,只是作为一个假设,这样的语法似乎不受支持:
(See另请参见:Document generic type parameters in JSDOC)
您尝试使用
as
(类型Assert)关键字不起作用,因为这不是JavaScript语法。这是TypeScript语法。您可以使用@type {...}
在JS Doc中使用JavaScript中的类型注解。