这些都是因为 js 是弱类型语言造成的。
有一些函数返回的类型不是唯一的,可以不是同一个类型的子类,也有可能是类的子类。vscode 在很多情况下不能够对这种引用进行准确的类型分析,只能给你提示可能的类型里大家都有的那些方法。即便函数只会返回一种类型,但是如果它有可能返回 null,vscode 会因为 null 没有任何属性不能给你提示这个类型的属性。
就拿 Document.getElementById() 来说,你可以在 vscode 里看到这个函数会返回 HTMLElement,确定是个 HTML 元素没错,但它到底是哪种类型的 HTML 元素呢?vscode 不知道……它也不知道实际上到底能不能获取到这个元素。


虽然作为编码者的我们可以确定某些操作能够获得的类型是唯一的,但 vscode 并没有那么智能。


那么 vscode 什么情况下能够判断出来呢,答案是你对引用进行过显式的类型判定的时候:


typeof、instanceof 、等于或不等于判断都可以作为 vscode 自动辨别类型的依据。
你可能会说:为了能识别出类型要对不可能有其他情况的代码加一堆没用的判断,wc,**!
确实,所以有另外一种办法,那就是手动为引用进行类型的标注。vscode 支持 jsdoc 文档,我们可以用 jsdoc 给变量强制指定类型。


也可以给函数的入参指定类型,vscode 可以给你提示传参的类型是否正确。
