2017-04-13 1 views
0

J'utilise Visual Studio Code 1.11.1.Visual Studio Code JavaScript Intellisense ne fonctionne pas pour les propriétés d'objets

Pour le code suivant, IntelliSense fonctionne correctement, étant entendu que la variable toile est de type HTMLCanvasElement:

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

En fait, quand j'écris le nom de cette variable suivi d'un point, il me montre toutes les propriétés et méthodes de HTMLCanvasElement.

Cependant, en utilisant le code suivant, dans lequel je conclurai cette variable à l'intérieur d'un objet (agissant comme un espace de noms), IntelliSense ne comprend pas plus que la variable est de type HTMLCanvasElement:

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

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

Lorsque j'écris "App.canvas" suivi d'un caractère point, Intellisense ne me montre pas toutes les propriétés et méthodes de HTMLCanvasElement. En fait, il considère App.canvas de type tout.

J'ai essayé aussi d'utiliser l'annotation @type comme dans le code suivant, mais le résultat est le même:

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

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

Est-il possible de faire IntelliSense comprendre les types de variables pour les propriétés de objets (comme App.canvas dans mon exemple)?

Répondre

0

Je travaille sur le support JS/TS pour VSCode. Nous utilisons le projet dactylographié pour alimenter nos deux JS et prise en charge linguistique TS, donc convaincus que vous utilisez dans ce bug: https://github.com/Microsoft/TypeScript/issues/10868

Pour contourner ce problème, essayez de déclarer le type de canvas lui-même sur App:

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

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

l'utilisation d'un objet littéral devrait également fonctionner:

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

Nous cherchons à améliorer IntelliSense dans ces cas

+0

Remerciez vous beaucoup pour votre réponse! La solution de contournement a fonctionné parfaitement. Bon à savoir que vous travaillez pour résoudre ce problème. Quoi qu'il en soit, continuez votre bon travail, car Visual Studio Code est un excellent éditeur de code léger pour travailler avec JavaScript! :) – user1945293