Страницы

Поиск по вопросам

четверг, 20 июня 2019 г.

Как в TypeScript указать массив классов?

Например у меня есть класс Module и от него будут наследовать много классов. Например модуль User или модуль Session, и я хочу хранить все эти классы в одном месте.
class User extends Module {
}
api.addModule(User)
как мне описать тип аргумента принимаемый функцией addModule?
addModule (moduleClass:Function){ this.modules[moduleClass.name] = moduleClass }
moduleClass:Function??? фанкшен работает, но мне нужны не любые функции а именно классы, да еще и унаследованные от Module
более того я хочу создать функцию addModules
api.addModules([User, Session])
чтобы можно было принимать массив классов =) подскажите как такой параметр описать в тайпскрипте? чтобы как бы не инстанс класса, а именно сам класс или его классы наследники.


Ответ

для указания того, что нам нужен не инстанс класса, а сам класс, применяется конструкция: typeof Class
addModule(ModuleClass:typeof Module) { this.modules[module.name] = ModuleClass }
getModule(name:string):typeof Module { return this.modules[name] }
addModules(modules:typeof Module[]) {
}
моя ошибка заключалась в том что я использовал устаревший синтаксис типа typeof(Module) который я нагуглил в обсуждении разработчиков тайпскрипта которое они вели аж в 2012 году ^_^

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

Отправить комментарий