将共享/部分模块导入另一个文件

时间:2015-12-10 16:33:00

标签: javascript import module typescript

说我有两个文件:

box.ts:

git reset --hard {most recent commit}

origin.ts:

export module Entities {
    export class Box  { .. Stuff }

据我了解javascript,这两个模块应合并为一个模块,其中包含我的两个类。(我只是因为组织原因需要它们在单独的文件中,但是框和原点都是实体。)

所以现在我有一个文件需要同时使用这两个文件:

服务actions.ts:

export module Entities {
    export class Origin  { .. other stuff }

这给了我错误:

  

重复的标识符'实体';

如果我有一个或另一个,它工作正常,但都失败了。

我有没有办法将这些结合起来,以便我可以在service-action.ts文件中执行import {Entities} from '../entities/box'; import {Entities} from '../entities/origin'; ... stuff that uses both of those entities. Entities.Box

执行此操作的唯一方法是将Entities.OriginBox放在同一个文件中吗?

2 个答案:

答案 0 :(得分:2)

不要将名称空间(内部模块)与外部模块混合使用。有关混合的参数,请参阅this postthis question以及其他人。我发现最好不要完全使用内部模块。我们没有从命名空间中获得任何封装优势。相反,目录是组织代码的简单而可靠的方法,您已经在使用它们了。

实体/ box.ts:

export class Box  { .. Stuff }

实体/ origin.ts:

export class Origin  { .. other stuff }

现在,您无需撰写Entities.Box,只需导入Box并使用它即可:

import { Box } from '../entities/box';
import { Origin } from '../entities/origin';

答案 1 :(得分:1)

使用as

import {Entities as BoxEntities} from './../entities/box';
import {Entities as OriginEntities} from './../entities/origin';

// Use BoxEntities and OriginEntities here

最好,如果您实际上是直接从文件中导出类(正如您所指出的那样),您可以创建一个entities.ts文件来为您处理它:

export * from './entities/box';
export * from './entities/origin';

然后导入此文件:

import * as Entities from './../entities';

// use Entities.Box and Entities.Origin here