2013-05-17 3 views
4

Я использую require.js для управления зависимостями и аннотаций Google Closure, чтобы дать мне возможность автозаполнения (в WebStorm/IDEA). Мы в значительной степени полагаемся на Backbone и разрабатываем наш Javascript-код в Java-подобном стиле - то есть как со статическими, так и с экземплярами.Google Closure: как комментировать параметр, используемый в качестве конструктора

Что остается неуловимым, так это то, как правильно писать аннотации для аргументов функции, которые на самом деле являются классами - параметры, используемые вместе с новым ключевым словом.

require(['foo'], function(Foo) { 
    var bar = new Foo(); 
}); 

WebStorm и/или Google Closure правильно предположить, что это является экземпляром Foo если я аннотировать параметр следующим образом:

require(['foo'], 
/** @param {Foo} Foo */ 
function(Foo) { 
    Foo.<cursor> <-- gives me an autocompletion for an instance of Foo 
}); 

quick googling предлагает использовать функции (новый: Foo) как описание параметра. Однако этот подход теряет автозаполнение для параметров конструктора и/или возможных статических методов, которые имеет класс.

Конструкцию я надеюсь на это должно походить на один:

require(['foo'], 
/** @param {Type<Foo>} Foo */ 
function(Foo) { 
    Foo.<cursor> <-- gives me an autocompletion for statics of Foo 
}); 

Есть ли способ для достижения этой цели?

ответ

7

Вы ищете

/** @param {function(new: Foo)} someConstructor */ 

Вы также можете указать аргументы конструктора, делая что-то вроде

function(new: Foo, ArgType1, ArgType2) 

Соответствующий отрывок из docs:

Имя оператора: Functi на new Тип:

Синтаксис Пример: {function(new:goog.ui.Menu, string)}

функция, которая принимает один параметр (строку), и создает новый экземпляр goog.ui.Menu при вызове с «новой» ключевое слово.

Задает построенный тип конструктора.