Как указать тип для функции, которая возвращает новый объект класса

Я использую компилятор закрытия Google для проверки моего кода javascript. У меня есть функция, которая создает, а затем возвращает новый «класс». То есть функция, которая возвращает объект, к которому может быть применено новое, и возвращает объект-экземпляр этого класса. Например.,

var newclass = createFactory('Car');
var acar = new newclass();
acar.show();     // executes newclass.prototype.show()
newclass.staticmethod();   // executes newclass.staticmethod()

Методы show и static были созданы методом createFactory.

У меня возникли проблемы с определением типа newclass для компилятора закрытия Google, чтобы он распознавал newclass как конструктор, который имеет метод класса staticmethod и метод экземпляра show.

Любая помощь будет оценена по достоинству.


person seth    schedule 15.09.2011    source источник
comment
createFactory() возвращает функцию? Можете ли вы показать нам код для createFactory?   -  person jfriend00    schedule 15.09.2011
comment
Однако createFactory находится во внешней библиотеке, например: createFactory(name) = { var x = function() { }; х.имя=имя; x.prototype.show = function() { ... }; x.staticmethod=function() { ...}; вернуть х; }   -  person seth    schedule 18.09.2011


Ответы (1)


Предполагая, что сгенерированная фабрика имеет какой-то общий базовый класс или интерфейс (я буду использовать KnownType). Это должно помочь:

/** @type {function(new:KnownType)} */
var newClass = createFactory();

Это говорит о том, что «newClass» — это функция, которую нужно вызывать с помощью «new», которая возвращает экземпляр KnownType, в этом случае она объявлена ​​как не принимающая никаких параметров, но вы можете.

CreateFactory может объявить этот тип в качестве типа возвращаемого значения или в любом другом месте, где вы обычно используете тип.

person John    schedule 26.09.2011