作者:大脸猫妈妈-啊珍妮妮_786 | 来源:互联网 | 2022-12-04 17:26
好.这很简单,只是为了删除恼人的错误消息.
我有一个抽象类路由器:
export abstract class Router {
}
和这样的界面
interface IModule {
name: string;
forms: Array,
route: typeof Router
}
现在我有一个看起来像这样的类,还有很多基于Router摘要的类
export class Module1 extends Router {
}
现在,我想像这样实例化路线:
let module: IModule = {
name: "My Module",
forms: [],
route: Module1
}
let router = new module.route();
// TS2511: Cannot create an instance of an abstract class.
代码运行得很好,并且router = new Module1()的实例正确,但我显然没有在Typescript中正确编写,因为我在转换 TS2511: Cannot create an instance of an abstract class.
时看到了.
定义这个的正确方法是什么?
谢谢
1> Titian Cerni..:
当你有一个抽象类时,它的构造函数只能从派生类中调用,因为该类是抽象的,不应该实例化.当你输入内容时typeof AbstractClass
,这会继续存在,构造函数将无法调用.
解决方案是不使用typeof Router
,而是返回一个构造函数签名Router
interface IModule {
name: string;
forms: Array,
route: new () => Router
}
如果你需要访问静态方法,另一个解决方案Router
是创建一个派生的接口typeof Router
,它将擦除构造函数的抽象性:
export abstract class Router {
static m(): void { console.log("Router"); }
}
type RouterClass = typeof Router;
interface RouterDerived extends RouterClass { }
interface IModule {
name: string;
route: RouterDerived
}
export class Module1 extends Router {
static m(): void { console.log("Module1"); }
}
let module: IModule = {
name: "My Module",
route: Module1
}
module.route.m();
let router = new module.route();