【问题标题】:Visual Studio Code JavaScript Intellisense not working for objects propertiesVisual Studio Code JavaScript Intellisense 不适用于对象属性
【发布时间】:2017-09-09 22:13:53
【问题描述】:

我正在使用 Visual Studio Code 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 的所有属性和方法。事实上,它认为 App.canvas 类型为 any

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

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

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

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

【问题讨论】:

    标签: javascript ide visual-studio-code intellisense


    【解决方案1】:

    我致力于 VSCode 的 JS/TS 支持。我们使用 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

    【讨论】:

    • 非常感谢您的回答!解决方法非常有效。很高兴知道您正在努力解决这个问题。不管怎样,继续努力吧,因为 Visual Studio Code 是一个很棒的轻量级代码编辑器,可以与 JavaScript 一起工作! :)
    • 截至今天,var App = { canvas: document.getElementsByTagName('canvas')[0] } 似乎对我不起作用...解决方法有点工作,我在 OS X 上使用 VS Code 1.45.1...
    • 已经4年了。什么时候能修好??
    猜你喜欢
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2016-07-21
    • 2021-05-24
    • 2019-01-25
    相关资源
    最近更新 更多