将Angular 2与TypeScript和命名空间一起使用

aar*_*ond 6 namespaces typescript angular

我正在构建一个大型应用程序,我正在尝试评估TypeScript和Angular2作为基本技术.

不幸的是,一旦我开始使用Angular2,我就遇到了使用自己的TypeScript文件命名的问题.

英雄教程为例,我试图让它与我看待自己的应用程序的结构相匹配.

- app 
-- boot.ts

- Heroes
-- Components
--- HeroDetail.ts
--- HeroList.ts

-- Interfaces
--- IHero.ts
Run Code Online (Sandbox Code Playgroud)

在这个结构中,我然后尝试为每个逻辑区域使用名称空间以便对它们进行分组.这导致IHero看起来像这样(例如):

namespace Heroes.Interfaces
{
  export interface IHero
  {
    Id: number;
    Name: string;
  }
}
Run Code Online (Sandbox Code Playgroud)

在这个结构中构建项目很有效,直到我尝试通过以下方式将Angular添加到混合中:import {Component} from 'angular2/core'; 当发生这种情况时,文件会丢失对同一名称空间中其他代码的所有引用,并且无法让它发现它们.

我已经看到这个问题是关于同样的问题.在那里,答案提到了"解决问题".出于这个原因,我认为这是可能的,但更重要的是我想知道为什么它不是在那一刻?这是一个bug还是设计?我一直在考虑在TS GitHub上提高它,但我希望在沿着这条路线前更好地了解情况.

谢谢你的建议!

bas*_*rat 5

这是一个错误还是设计使然?

这是设计使然。如果您使用文件模块,请勿使用名称空间。每个文件已经是一个模块。你的整个项目需要一个模块加载器。

阅读: Angular 2 模块与 JavaScript 模块 — Angular 2 架构文档

  • 不,它们并非毫无用处。使用模块加载器。例如。网页包。“你是故意固执和无助吗”这有点粗鲁:-/ (3认同)
  • 道歉。这是出于沮丧。我希望通过详细的问题和评论,我可以获得更多的信息来处理。你似乎无意说明为什么这个想法是错误的,只是事实确实如此。我会研究一下 Webpack。谢谢 (2认同)