为什么Visual Studio Code的智能感知在这个简单的Javascript对象中被破坏了?



我发现当Javascript对象包含对同一对象的另一个属性的赋值时,VSCode的intellisense会中断。示例:

var obj = {
a: 0,
b: "",
func1: function () {
// do something
},
func2: function() {
this.func1();
console.log(this.a + this.b);
//this.a = 1;
}
}

当输入到VSCode中时,一切都很好——语法正确突出显示,intellisense可以识别所有项目。鼠标悬停在术语上给出它们的解释,代码完成给出正确的预测,等等。

但是在func2的定义中取消对行this.a = 1的注释打破了这一点。func2的名称将颜色变为绿色(功能通常为黄色(,将鼠标悬停在func2上,它"告诉"我们它是typeof func2,并且func2中的thisfunc1ab也无法识别。

但是,运行此代码不会产生任何错误——行this.a = 1正确地更改了obj的属性a,一切都如预期的那样工作。

那么为什么VSCode会这样做,有没有办法解决它呢?

编辑:使用//@ts-check会导致类似的错误-如果没有this.a = 1,一切都很好,但有了它,会出现相同的错误。就好像@ts-check停止将func2视为obj的成员。

我远非VSCode专家,但我之前在VSCode和WebStorm上都遇到过语法识别问题,重新启动程序、重置设置可能有效,也可能无效。在某些用例中,这些东西可能是有缺陷的。例如,我在npm项目中查看了不同的git分支,突然所有的导入都莫名其妙地中断了。不是最科学的答案,但祝好运

最新更新