我发现当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
中的this
、func1
、a
和b
也无法识别。
但是,运行此代码不会产生任何错误——行this.a = 1
正确地更改了obj
的属性a
,一切都如预期的那样工作。
那么为什么VSCode会这样做,有没有办法解决它呢?
编辑:使用//@ts-check
会导致类似的错误-如果没有this.a = 1
,一切都很好,但有了它,会出现相同的错误。就好像@ts-check停止将func2
视为obj
的成员。
我远非VSCode专家,但我之前在VSCode和WebStorm上都遇到过语法识别问题,重新启动程序、重置设置可能有效,也可能无效。在某些用例中,这些东西可能是有缺陷的。例如,我在npm项目中查看了不同的git分支,突然所有的导入都莫名其妙地中断了。不是最科学的答案,但祝好运