将 shared/partial 模块导入另一个文件

Import shared/partial module into another file

假设我有两个文件:

box.ts:

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

origin.ts:

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

据我了解javascript,这两个模块应该合并到一个模块中,其中包含我的 类..(出于组织原因,我只想将它们放在单独的文件中,但两个都框和 origin 是实体。)

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

服务-actions.ts:

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

... stuff that uses both of those entities.

这给了我错误:

Duplicate identifier 'Entities';

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

有什么方法可以组合这些,以便我可以在我的服务-action.ts 文件中执行 Entities.BoxEntities.Origin

唯一的方法是将 BoxOrigin 放在同一个文件中吗?

使用as:

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

// Use BoxEntities and OriginEntities here

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

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

然后导入这个文件:

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

// use Entities.Box and Entities.Origin here

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

entities/box.ts:

export class Box  { .. Stuff }

entities/origin.ts:

export class Origin  { .. other stuff }

现在不必编写 Entities.Box,您只需导入 Box 并使用它:

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