2017-04-13 22 views
0

私はVisual Studio Code 1.11.1を使用しています。次のコードについてはVisual StudioコードJavaScriptオブジェクトのプロパティでIntellisenseが機能しない

、インテリセンスがキャンバス変数の型であることを理解し、正しく動作HTMLCanvasElement

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

、私はその変数の名前は、ドットそれに続く書き込みHTMLCanvasElementのすべてのプロパティとメソッドを表示します。

しかし、私は(名前空間として機能する)オブジェクトの内部でその変数をラップする次のコードを使用して、インテリセンスは、変数の型のHTMLCanvasElementであることはもう理解していない:

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

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

App.canvas」の後ろにドット文字を書くと、Intellisenseはすべてのプロパティとメソッドを表示しません。HTMLCanvasElement実際にはApp.canvasのいずれかであるとみなされます。

私は次のコードのように@typeアノテーションを使用することも試みたが、結果は同じです:

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

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

はインテリセンスがの性質のために、変数の型を理解させるために、それは可能です私の例ではApp.canvasのようなオブジェクトですか?

答えて

0

私はVSCodeのJS/TSサポートを担当しています。 https://github.com/Microsoft/TypeScript/issues/10868回避策として

App自体にcanvasの種類を宣言してみてください:

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

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

私たちは、あなたがこのバグに実行されていると信じて、私たちのJSとTSの言語サポートの両方に電源を供給するために活字体のプロジェクトを使用しますオブジェクトリテラルを使用することでも動作するはずです:私たちが探している

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

をこれらのケースで

+0

感謝をインテリセンスの改善にあなたの答えは大変です!回避策は完全に機能しました。あなたがこの問題を解決するために働いていることを知っておきましょう。とにかく、Visual Studio CodeはJavaScriptを扱う素晴らしい軽量コードエディタなので、良い仕事を続けてください! :) – user1945293

関連する問題