3

当编译(--out)多个 *.ts 文件时,每个文件都包含一个具有相同模块标识符的类,会创建一个 *.js 文件,其中每个类都包装在自己的闭包中,并将模块的引用传递给每个闭包。

例子:

酒吧.ts:

module baz {export class Bar {}}

脚:

module baz { export class Foo {}}

out.js

var baz
(function(baz){ var Bar = ... })(baz);
(function(baz){ var Foo = ... })(baz);

有没有办法将两个类都包含在一个文件中,以便编译器创建一个闭包来声明两个类?将所有类放在一个 *.ts 文件中似乎是一个非常糟糕的主意。

目的是:

  1. 每个类使用一个 *.ts 文件
  2. 在模块的所有类中使用未导出的类
  3. 为模块提供一个干净的接口

我实际意思的类似 Dart 的伪代码:

baz.ts

module baz {
    part "Foo.ts";
    part "Bar.ts";
}

part of "baz.ts";
export class Foo {}

巴茨

part of "baz.ts";
export class Bar {}

谢谢阅读,

马丁

4

1 回答 1

1

在 TypeScript 中,问题的症结在于第 2 点。如果将模块拆分到多个文件中,则需要导出要对其他文件可用的类。

当然,这也意味着消费者将看到列出的所有这些类,我理解这会影响您关于为模块提供干净接口的观点。在给定约束的情况下构建模块和类的答案将根据您的个人情况而有所不同。我倾向于不将模块视为宽的命名空间,我将它们做得非常狭窄和具体,所以我会有一个Ajax模块,而不是一个Communication具有不同类的模块来表示不同的通信方式。

于 2013-02-13T10:09:43.477 回答