打字稿。如何在一个模块中导出两个类(在单独的文件中)?

时间:2015-03-20 14:24:07

标签: typescript

我在两个单独的文件中声明了两个类。

a.ts

export class AClass {

  public constructor () {
    console.log('AClass');
  }

}

b.ts

export class BClass {

  public constructor () {
    console.log('BClass');
  }

}

我想在一个模块中合并它们。我怎么能意识到它?

///<reference path='a.ts' />
///<reference path='b.ts' />

module Common {

  export class A extends AClass {}
  export class B extends BClass {}

}

说:

  

找不到名字'AClass'。

  

找不到名字'BClass'。

我可以导入课程

import AClass = require('a');
import BClass = require('b');

module Common {

}

但我怎样才能正确导出它们呢?

在文档中找不到任何信息。请告诉我在一个模块中实现声明的最佳方法?提前谢谢

3 个答案:

答案 0 :(得分:17)

我这样做:

<强>米/ a.ts

export class A {
}

<强>米/ b.ts

export class B {
}

<强>米/ index.ts

export { A } from './a.ts';
export { B } from './b.ts';

然后我这样做: 的 consumer.ts

import { A, B } from './m';

答案 1 :(得分:6)

如果您声明类似于您展示的类,则将其包含在“全局”命名空间中。要在模块中声明类,只需将其包装在模块声明中:

module Common{
    export class ClassA{}
}

您可以在多个文件中重新声明模块,只会为模块创建一个javascript对象。

答案 2 :(得分:4)

您的班级声明前面有export

export class AClass {

这会将源文件转换为外部模块。这意味着您需要使用其他模块中的import / require

import a = require("a");

module Common {
    export class A extends a.AClass {}
}

请注意,AClass似乎是a的成员,因为这是我导入其包含模块的原因。

或者,您可以在其包含的单个类之后重命名a模块,例如

<强> AClass.ts

class AClass {
  public constructor () {
    console.log('AClass');
  }    
}

export = AClass;

通过&#34;分配&#34;到export我们使该类成为模块的整个单输出。因此在另一个模块中:

import AClass = require("AClass");

var a = new AClass(); // no prefix needed

如果您的模块仅导出单个类(或函数),则这可能更整洁。