Visual Studio 代码 JavaScript Intellisense 不适用于对象属性

Visual Studio Code JavaScript Intellisense not working for objects properties

我正在使用 Visual Studio 代码 1.11.1.

对于以下代码,Intellisense 工作正常,理解 canvas 变量的类型是 HTMLCanvasElement:

var canvas = document.getElementsByTagName('canvas')[0];

事实上,当我写下那个变量的名称后跟一个点时,它会向我显示 HTMLCanvasElement.

的所有属性和方法

但是,使用下面的代码,我将该变量包装在一个对象中(充当命名空间),Intellisense 不再理解该变量的类型 HTMLCanvasElement:

// create a namespace "App"
var App;
App = {};

App.canvas = document.getElementsByTagName('canvas');

当我写“App.canvas”后跟一个点字符时,Intellisense 不会向我显示 HTMLCanvasElement[ 的所有属性和方法=39=].事实上,它认为 App.canvas 类型 any.

我也试过在下面的代码中使用 @type 注释,但结果是一样的:

// create a namespace "App"
var App;
App = {};

/** @type {HTMLCanvasElement} */
App.canvas = document.getElementsByTagName('canvas')[0];

是否可以让 Intellisense 理解对象属性的变量类型(如我的示例中的 App.canvas)?

我致力于 JS/TS 对 VSCode 的支持。我们使用 TypeScript 项目来支持我们的 JS 和 TS 语言支持,所以相信您 运行 遇到了这个错误:https://github.com/Microsoft/TypeScript/issues/10868

作为解决方法,尝试在 App 本身上声明 canvas 的类型:

/** @type {{canvas:HTMLCanvasElement}} */
var App;
App = {};

App.canvas = document.getElementsByTagName('canvas')[0];

使用对象文字也应该有效:

var App = { canvas: document.getElementsByTagName('canvas')[0] }

我们正在研究在这些情况下改进 IntelliSense