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

标签 javascript typescript typescript1.5

我已经开始从事一个大型 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 - 但是,必须手动将每个文件添加到 map 是开发人员开始添加类时引入问题的必经之路。

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

最佳答案

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

// 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;

关于javascript - 在 TypeScript 中使用分布在多个模块文件中的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31983209/

相关文章:

javascript - 是否可以访问 nodejs 模块的 *loaded* 子级?

node.js - NestJS MQTT 微服务的有效@MessagePattern 是什么?

TypeScript - 如何键入自实例化函数

javascript - 无法使用 --out Comment : Getting Error 将 typescript 模块 (.ts) 文件连接到单个输出 (.js)

javascript - 如何使自定义页脚点亮元素保留在页面底部

javascript - 在较大矩形中拟合不同大小矩形的算法

javascript - <input> 标记上出现警告 : Unknown props `input` , `meta`。从元素中删除这些 props

javascript - 注入(inject)和使用 Http Angular2

javascript - 编译错误 5 MIN QUICKSTART Angular 2.0