从Typescript中的另一个模块继承的类

时间:2016-02-05 14:38:10

标签: class module typescript extends

我正在尝试将抽象类扩展到另一个类,但为了更方便,我需要在另一个文件中使用这个抽象类。不幸的是,它引发了一个我很难理解的运行时错误。

这有效:

abstract class Item{
   constructor(){
      console.log("I am an Item");
   }
}

export class Folder extends Item{
    constructor(){
         super();
    }
}

记录:

I am an Item

这不是:

module MyModule{
    export abstract class Item{
        constructor(){
            console.log("I am an Item");
        }
    }
}

export class Folder extends MyModule.Item{
    constructor(){
        super();
    }
}

编译但抛出:

Uncaught TypeError: Cannot read property 'prototype' of undefined

有谁知道发生了什么?

1 个答案:

答案 0 :(得分:0)

源文件中的顶级导出(在这种情况下为export class Folder)意味着TypeScript会将该文件视为外部模块,但除非您在编译时指定模块格式,否则应该发出{{1所以,如果您只使用内部模块,我有点困惑如何设法编译这些代码片段。

我强烈建议使用外部模块(其中每个error TS1148: Cannot compile modules unless the '--module' flag is provided.文件本身就是一个模块)并完全避免名称空间(以前称为内部模块)。

除了外部模块之外,您的代码看起来像什么:

.ts

但是,如果您想坚持使用命名空间,那么您可以这样做:

// mymodule.ts
export abstract class Item {
  constructor() {
    console.log("I am an Item");
  }
}

// folder.ts
import * as MyModule from './mymodule';

export class Folder extends MyModule.Item {
  constructor() {
    super();
}