Node.js 抽象类子类的动态类型化
我有一个静态定义的抽象类和一个动态检索的实现 即 除了一件事:我不能在没有“作弊”的情况下调用构造函数 即Node.js 抽象类子类的动态类型化,node.js,typescript,dynamic,abstract-class,Node.js,Typescript,Dynamic,Abstract Class,我有一个静态定义的抽象类和一个动态检索的实现 即 除了一件事:我不能在没有“作弊”的情况下调用构造函数 即 newbar()输出无法实例化抽象类 我通过这样做解决了这个问题 /@ts忽略 新条() 但我觉得我可以做得更好 整个用例是,在运行时创建类的函数将根据它所在的系统采取不同的操作(动态加载我为了简单起见删除的额外库)您可以做的最简单的事情是不使用显式类型注释,让编译器推断它将为dynamicClass提供什么: export abstract class Foo { abstract
newbar()
输出无法实例化抽象类
我通过这样做解决了这个问题
/@ts忽略
新条()代码>
但我觉得我可以做得更好
整个用例是,在运行时创建类的函数将根据它所在的系统采取不同的操作(动态加载我为了简单起见删除的额外库)您可以做的最简单的事情是不使用显式类型注释,让编译器推断它将为dynamicClass
提供什么:
export abstract class Foo {
abstract get(): void;
}
const dynamicClass = (function() {
return class Bar extends Foo {
get() {
console.log('get');
}
constructor() {
super();
console.log('cons');
}
}
})();
new dynamicClass();
如果您想走显式路线,可以使用返回Foo
的构造函数签名,这应该主要消除构造函数的抽象性:
export abstract class Foo {
abstract get(): void;
}
const dynamicClass: new () => Foo = (function() {
return class Bar extends Foo {
get() {
console.log('get');
}
constructor() {
super();
console.log('cons');
}
}
})();
new dynamicClass();
谢谢,我使用了第二种解决方案,我正在寻找类似于X扩展的解决方案…
但您的解决方案适合:)
export abstract class Foo {
abstract get(): void;
}
const dynamicClass: new () => Foo = (function() {
return class Bar extends Foo {
get() {
console.log('get');
}
constructor() {
super();
console.log('cons');
}
}
})();
new dynamicClass();