将大型打字稿文件拆分为多个文件的模块

时间:2015-09-29 14:57:53

标签: javascript typescript

我目前有一个想要拆分的大型打字稿文件。有一些函数和变量仅在文件中使用,还有许多类。它目前看起来像这样:

var numbers = [1, 2, 3];
function formatDate() {...}

class Widget { ... }
class Section { ... }

我已经尝试将它放在一个模块中并将其拆分为几个文件:

//Widget.ts
module ReportTemplate {
    export class Widget { ... }
}

//Section.ts
module ReportTemplate {
    export class Section { ... }
}

//ReportTemplate.ts
/// <reference path="Widget.ts"/>
/// <reference path="Section.ts"/>
module ReportTemplate {
    var numbers = [1, 2, 3];
    function formatDate() { ... }
}

我希望这相当于我的原始文件,但包含在一个模块中,但我发现WidgetSection无法访问numbersformatDate

我不确定我是否只是误解了引用,所以我尝试在ReportTemplate.tsSection.ts中添加对Widget.ts的引用,但它没有帮助。我发现允许Section.tsWidget.ts访问numbersformatDate的唯一方法是导出它们,但我不希望它们可以在模块。

我已经阅读了很多关于打字稿模块的内容,但是我没有找到任何与我想要做的相同的例子,所以我仍然感到困惑。我是在尝试做一些无法做到的事情,还是我只是以错误的方式去做?

1 个答案:

答案 0 :(得分:6)

我建议你转向ES6风格的模块&amp;进口。而不是使用关键字module

现在称为“命名空间”

为了适应上面的例子,请执行此操作...

//Widget.ts
export class Widget { ... }

//Section.ts
export class Section { ... }

//ReportTemplate.ts
import {Widget} from './Widget.ts';
import {Section} from './Section.ts';
var numbers = [1, 2, 3];
function formatDate() { ... }
function doStuff() {
  // use the classes you imported
  var widget = new Widget();
  var section = new Section();
}

您必须告诉tsc使用哪种模块语法,并至少定位ES5:

//tsconfig.json
{
  "module": "common",
  "target": "ES5"
}

当进入TypeScript here

时,有关于此更改的对话