代码之家  ›  专栏  ›  技术社区  ›  Magician

Typescript:抽象类的实例

  •  2
  • Magician  · 技术社区  · 7 年前

    好 啊。这是非常简单的,只是删除一个恼人的错误消息。

    我有一个抽象类路由器:

    export abstract class Router {
    }
    

    还有这样的接口

    interface IModule {
        name: string;
        forms: Array<IForm>,
        route: typeof 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 回复  |  直到 7 年前
        1
  •  13
  •   Titian Cernicova-Dragomir    7 年前

    typeof AbstractClass ,构造函数将不可调用。

    解决办法是不使用 typeof Router 而是返回 Router

    interface IModule {
        name: string;
        forms: Array<IForm>,
        route: new () => 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(); 
    
    推荐文章