Заставить NetBeans обеспечить завершение кода для переменной JavaScript, предполагающей определенный тип

#javascript #netbeans #ide #code-completion

#javascript #netbeans #ide #завершение кода

Вопрос:

Я использую NetBeans, в частности пакет HTML5 amp; PHP. В настоящее время я работаю над игрой, которая использует элемент canvas HTML5. У меня есть глобальная переменная с именем context :

 var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
  

Очевидно, что среда IDE понятия не имеет, что такое тип context , поскольку она не может определить тип canvas в первую очередь, и она не может знать, что getContext() будет возвращено при вызове этого canvas . Я хотел бы, чтобы NetBeans предоставил функцию завершения кода для context предположения, что она представляет определенный тип (а именно, CanvasRenderingContext2D ). После проведения некоторых исследований я обнаружил это:https://blogs.oracle.com/netbeansphp/entry/defining_variable_type_in_a. На сайте указано, что такая функция может быть использована в PHP, предоставив комментарий PHPDoc, который выглядит следующим образом: /* @var $variable type */ . Я знаю, что это касается PHP, но я решил попробовать это и в JavaScript:

 /* @var context CanvasRenderingContext2D */
  

К сожалению, вышеописанное не сработало. Я подумал, что, возможно, NetBeans по какой-то причине не знает этот тип, и попробовал что-то более простое:

 /* @var test HTMLImageElement */
  

Опять же, не было никаких предложений для test , за исключением тех, которые являются родными для всех объектов JavaScript.

Итак, возможно ли это вообще? Я был бы признателен, если бы кто-нибудь предоставил решение. Заранее спасибо!

Ответ №1:

JavaScript использует JSDoc, а не PHPDoc, поэтому вам нужно использовать

 /** @type HTMLImageElement */
var myImage;
  

Комментарии:

1. Спасибо, это отлично работает с HTMLImageElement , к сожалению, нет подсказок для CanvasRenderingContext2D . Похоже, они еще не добавили поддержку для этого: netbeans.org/bugzilla/show_bug.cgi?id=234149 но в любом случае это правильный ответ на мой вопрос, поэтому я принимаю его.