包含多个文件的TypeScript导入语法

时间:2016-04-25 16:06:15

标签: typescript typescript1.8

我正在尝试在TypeScript中创建一个大角度应用程序,我希望我的应用程序使用以下文件夹结构进行布局:

./应用
--- 控制器
--- --- HomeController.ts
--- --- SomeOtherController.ts
--- 指令
--- --- MyDirective.ts
--- app.ts

我还希望布局命名空间/模块,以便所有控制器都在MyApp.Controllers命名空间中。所以在上面的例子中,我在模块中有2个控制器:

MyApp.Controllers.HomeController
MyApp.Controllers.SomeOtherController

我设置了以下内容:

HomeController.ts

export module MyApp.Controllers {
  export class HomeController {
      ...
  }
}

SomeOtherController.ts

export module MyApp.Controllers {
  export class SomeOtherController {
      ...
  }
}

现在在app.ts中我想导入我的所有控制器,这就是我遇到问题的地方,我试试:

 import * as Controllers from './controllers/HomeController'

然后访问我必须做的控制器:

Controllers.MyApp.Controllers

哪个很难看。另外,我如何从其他文件中获取控制器?理想情况下,我想导入名称空间“MyApp.Controllers”中的所有内容,我们可以使用它而无需在代码中添加MyApp.Controllers前缀。

2 个答案:

答案 0 :(得分:3)

你必须摆脱像C#/ Java这样的语言的思维方式,你可以使用命名空间来组织代码。 如果使用打字稿,则可以使用类似于文件系统的方法来组织代码,其中文件系统包含文件夹和文件。

  • 每个文件都已经是一个模块 - 所以摆脱ts文件中的export module
  • 您将逻辑耦合的类分组到一个文件中,理想情况下每个文件一个类。
  • 您可以将文件放在文件夹中,以进一步构建应用程序。

因此,在删除export module之后,您将使用这样的控制器:

import {HomeController} from './controllers/HomeController'

希望这有帮助。

答案 1 :(得分:0)

我不知道如何摆脱丑陋的" Controllers.MyApp.Controllers,您必须在其中指定完全限定的命名空间+名称。

现在,恕我直言(以我的拙见),我认为没有什么"丑陋"对这个。 如果从其他名称空间引用名称,则只需要完全限定名称。但是如果从同一名称空间引用它,则不需要全名。有意义吗?

此外,我更喜欢将所有引用添加到单个.TS文件(例如Reference.ts),并将Reference.ts文件添加到任何地方。此参考文件以排序方式引用项目中的所有.TS文件(因此编译器可以从上到下正确编译)。