我有一个静态定义的抽象类,并动态检索了它的实现 即
export abstract class Foo {
abstract get();
}
const dynamicClass: typeof Foo = ( function() {
return class Bar {
get: function() {
console.log('get');
}
constructor() {
super();
console.log('cons');
}
}
}();
这很正常,只有一件事:没有“作弊”,我就不能调用构造函数
IE浏览器
new Bar()
的输出无法实例化抽象类
我已经通过这样做解决了
// @ts-ignore
new Bar();
但是我觉得我可以做得更好。
整个用例是,在运行时创建类的功能将根据其所使用的系统而有所不同(动态加载为简单起见而删除的额外库)
答案 0 :(得分:1)
最简单的方法是不使用显式类型注释,让编译器推断对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();