在 TypeScript 中使用分布在多个模块文件中的命名空间

新手上路,请多包涵

我已经开始从事一个大型打字稿项目。

从一开始,我就想让我的文件井井有条(这个项目将在许多开发人员之间进行拆分,因此非常有必要进行排序)。

我一直在尝试使用模块/命名空间并将类拆分为每个文件的单独文件,并使用一个文件夹保存命名空间。

文件结构为:

 app.ts
\Classes
---- \Animals
---- ---- Mammals.ts
---- ---- Reptiles.ts

然后,我尝试使用类似以下内容导入 app.ts 中该命名空间中的所有文件: import * as Animals from "./Classes/Animals"

至于命名空间文件本身,我尝试了以下方法,但没有成功:

 namespace Animals {
    export class Mammals {
        constructor() {
        }
    }
}

并且:

 module Animals {
    export class Reptiles {
        constructor() {
        }
    }
}

不幸的是,该路径从未被识别(因为它指向一个文件夹而不是单个文件)。这可能吗?将我的所有类都来自一个文件中的单个名称空间将导致文件长达数千行,并且对于该项目而言是不可维护的。

我还注意到 TypeScript 1.5 支持 tsconfig.json - 但是,必须手动将每个文件添加到映射是开发人员开始添加类时引入问题的必经之路。

注意:我使用的是 Visual Studio 2015、TypeScript 1.5(我相信,不确定如何验证)。我还打开了 ES6 支持。

原文由 aaron-bond 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 549
2 个回答

使用重新导出来创建一个外部模块,该模块对来自其他模块的类型进行分组和公开:

 // Classes/Animals.ts
export * from '.\Animals\Mammals';
export * from '.\Animals\Reptiles';

然后像往常一样从新模块导入类型:

 // app.ts
import * as Animals from '.\Classes\Animals'

let dog: Animals.Dog;
let snake: Animals.Snake;

或者

// app.ts
import { Dog, Snake } from '.\Classes\Animals'

let dog: Dog;
let snake: Snake;

原文由 Vadim Macagon 发布,翻译遵循 CC BY-SA 3.0 许可协议

找到了实现目标的方法,但不是使用 namespace 关键字。

  1. 命名空间下的“动物”类 Animal.ts & Mammal.ts & Reptile.ts。
  2. 以 index.ts 为桶。
  3. animals.ts 用于命名空间分组。

动物命名空间

示例类:

班级

index.ts(作为桶)

在此处输入图像描述

animals.ts(用于命名空间分组)

在此处输入图像描述

在这里,您可以了解名称空间的概念。

在此处输入图像描述

原文由 Val 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题