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();