【问题标题】:Using Angular with TypeScript and Namespaces将 Angular 与 TypeScript 和命名空间一起使用
【发布时间】:2016-04-23 12:24:04
【问题描述】:

我正在构建一个大型应用程序,我正在尝试评估 TypeScript 和 Angular 作为要使用的基础技术。

不幸的是,在我开始使用 Angular 后,我在命名自己的 TypeScript 文件时遇到了问题。

Heroes tutorial 为例,我试图让它与我看到自己的应用程序的结构相匹配。

- app 
-- boot.ts

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

-- Interfaces
--- IHero.ts

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

namespace Heroes.Interfaces
{
  export interface IHero
  {
    Id: number;
    Name: string;
  }
}

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

我看到this question 询问过同样的问题。在那里,答案提到了“解决方法”。出于这个原因,我认为这是可能的,但更重要的是,我想知道为什么它不是现在?这是一个错误还是设计使然? 我一直在考虑在 TS GitHub 上提出它,但我想在走这条路之前了解更多信息。

感谢您的建议!

【问题讨论】:

    标签: angular typescript namespaces


    【解决方案1】:

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

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

    Read: Angular 2 Modules vs JavaScript Modules — Angular 2 Architectural Documentation

    【讨论】:

    • 我知道在文件顶部有一个import 语句会将它变成一个文件模块。我要问的是,这一定是这样吗?我想在命名空间中构建我的项目,因为我可能会为每个部分构建一个单独的 JS 文件(它是一个企业应用程序,这样做是为了安全,因为它可以根据访问权限进行限制)。在这种情况下,命名空间似乎比单个文件模块更符合逻辑?
    • What I'm asking is that does this HAVE to be the case.
    • 没有。他们不是没用的。使用模块加载器。例如。网页包。 Are you being deliberately obstinate and unhelpful 有点粗鲁:-/
    • 道歉。这是出于沮丧。我曾希望通过详细的问题和评论,我可以获得更多信息。你似乎无意说明为什么这种想法是错误的,只是事实如此。我将研究 Webpack。谢谢
    • 过去三年发生了很多变化 :)
    猜你喜欢
    • 1970-01-01
    • 2015-08-02
    • 2012-01-11
    • 2016-09-14
    • 2021-08-26
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多