3

我的应用程序具有以下结构

app/
 |-common/
 |-modules/
 | |-projects/
 | | |-models.ts
 | | |-controller.ts
 | | |-commands.ts
 | | '-module.ts
 | |-login/
 | '-dashboard/
 |-typings/
 '-app.ts

里面的文件common/,为了简洁login/dashboard/省略了,但假设文件夹包含文件,模块之间没有交叉引用,但模块common/可以自由引用里面的文件。

我正在尝试找到一种方法让 typescript 将此项目编译成...

app/
 |-common.js
 |-modules/
 | |-projects.js
 | |-login.js
 | '-dashboard.js
 '-app.js

我正在使用内部模块,因此文件如下models.ts所示:

/// <reference path='../../common/ModelCollection.ts' />

module Sparrow.Projects {
  'use strict';

  // . . .

  export class Company {
    id: number;
    name: string;

    get text() {
      return this.name;
    }
  }
}

我尝试在每个文件夹的基础上组合打字稿文件,然后使用--outDir但管理引用进行编译比我最初想象的要难。事实上,我无法让它工作。

有什么建议么?

4

1 回答 1

2

您需要使用单独的编译来执行此操作。

例子:

通用/utils.ts

function utilFn1() { ... }

常见/fooManager.ts

/// <reference path="utils.ts" />  
class FooManager () { ... utilFn1(); ... }

模块/仪表板/panel.ts

/// <reference path="../../common.d.ts" />
var panel = new FooManager();

模块/仪表板/main.ts

/// <reference path="../../common.d.ts" />
/// <reference path="panel.ts" />
panel.load();

然后你的编译步骤如下所示:

tsc --out common.js --declaration common\utils.ts common\fooManager.ts
tsc --out modules\dashboard.js modules\dashboard\panel.ts modules\dashboard.main.ts

您可以考虑的另一件事是每个输出都有一个通用的“references.ts”文件,该文件仅具有指向所有文件的引用标记。例如,common/references.ts将引用utils.tsand fooManager.ts,而这些文件又将引用references.ts. 这样可以更清楚地了解哪些文件是逻辑组的一部分,并使您可以更明确地控制输出的顺序。在这种情况下,您只需将references.ts其作为唯一输入传递给tsc而不是单独传递所有文件。另请参阅此博客文章的“参考”部分


来自提问者的有用的澄清附录,我认为值得添加:

我想强调的是,在引用其他模块时引用声明文件 (.d.ts) 而不是 .ts 文件至关重要。那并拆分编译以便可以自动生成声明文件就可以了。

于 2013-11-04T23:29:16.927 回答