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

Import shared/partial module into another file

本文关键字:导入 另一个 文件 模块 共享      更新时间:2023-09-26

假设我有两个文件:

box.ts:

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

原点.ts:

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

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

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

服务操作.ts:

import {Entities} from '../entities/box';
import {Entities} from '../entities/origin';
... stuff that uses both of those entities.

这给了我一个错误:

重复标识符"实体";

如果我有一个或另一个,它运行良好,但两者都失败了。

有没有一种方法可以将它们组合起来,以便我可以在service-action.ts文件中执行Entities.BoxEntities.Origin

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

不要将名称空间(内部模块)与外部模块混合使用。请参阅这篇文章、这个问题和其他反对混合的论点。我发现最好不要完全使用内部模块。我们没有从名称空间中获得任何封装好处。相反,目录是组织代码的一种简单而可靠的方式,而且您已经在使用它们了。

实体/box.ts:

export class Box  { .. Stuff }

实体/来源.ts:

export class Origin  { .. other stuff }

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

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

使用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