我目前有一个想要拆分的大型打字稿文件。有一些函数和变量仅在文件中使用,还有许多类。它目前看起来像这样:
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() { ... }
}
我希望这相当于我的原始文件,但包含在一个模块中,但我发现Widget
和Section
无法访问numbers
和formatDate
。
我不确定我是否只是误解了引用,所以我尝试在ReportTemplate.ts
和Section.ts
中添加对Widget.ts
的引用,但它没有帮助。我发现允许Section.ts
和Widget.ts
访问numbers
和formatDate
的唯一方法是导出它们,但我不希望它们可以在模块。
我已经阅读了很多关于打字稿模块的内容,但是我没有找到任何与我想要做的相同的例子,所以我仍然感到困惑。我是在尝试做一些无法做到的事情,还是我只是以错误的方式去做?
答案 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
时,有关于此更改的对话