Я определил абстрактный BaseClass
в проекте NodeJS Typescript, и у меня есть список производных классов, которые реализуют и расширяют это BaseClass
.
// baseModule.ts
export abstract class BaseClass {
constructor() {}
abstract method(): void;
}
export interface ModuleConstructor<T extends BaseClass> {
new (): T
}
export function createModule<T extends BaseClass>(type: ModuleConstructor<T>): T {
return new type();
}
Я пытаюсь найти способпрограммно во время выполнения создайте экземпляр одного из этих классов.
Ограничение здесь заключается в том, что я хотел бы иметь возможность добавить новый файл myDerivedClass.ts
в папку моего проекта и автоматически включить его в список.доступных модулей во время выполнения.
Рабочий процесс разработчика будет следующим: 1) создать новый файл myNewModule.ts
2) создать и экспортировать класс, расширяющий BaseClass
3) сохранить myNewModule.ts
до ./myModules
// ./myModules/myNewModule.ts
export class MyModule extends BaseClass {
constructor() {
super()
}
method() {
//Do something custom
}
}
Поток времени выполнения (в идеале без необходимости перестраивать) будет 1) Пользователь выбирает из списка доступных модулей 2) createModule
Функция Factory создает новый экземпляр выбранного модуля и передает его как экземпляр
// someOtherClass.ts
const modules = require('./myModules/*') //<- Something to this effect
import { BaseClass, createModule, ModuleConstructor } from './BaseClass'
export class SomeOtherClass {
public mod: BaseClass
constructor(mod: ModuleConstructor) {
this.mod = createModule(mod)
}
}
for (let m in modules) {
console.log(modules[m].name);
}
let someObj = SomeOtherClass(modules[m]);
someObj.mod // <- instance of derived class.