Commonjs 库的 index.ts 作为外部模块

Commonjs library's index.ts as external module

我需要一些指导才能正确开发可重用的 commonjs 库(npm 包)。 假设库结构如下:

—lib
——Helper.ts
——Serialization.ts
——meta
——— Entity.ts
—index.ts

等等。每个文件都是外部模块。

现在我需要创建入口文件(比如 index.ts),它将公开库的功能并将用作入口点。 在这里,我无法全神贯注地创建它。我想通过导出所有内容来保留嵌套结构而不展平它:

export * from './lib/Helper’;
export * from './lib/Serialization’;
export * from './lib/meta/Entity’;
…

因为这将删除逻辑分组并且将来可能导致名称冲突

我也试过 index.ts 这样的:

import {Helper} from './lib/Helper';
import * as Serialization from './lib/Serialization';
import * as Decorators from './lib/meta/Decorators';

let core = {
    Helper: Helper,
    Serialization: Serialization,
    Meta: {
        Entity: Entity,
    }
}

export default core;

在我开始像这样使用导入类型之前,它工作得很好:

import Core from ’nameOfTheNpmPackage';

let Entity = Core.Meta.Entity;

function f(e: Entity)//<—This produce error cannot find name ‘Entity'
{

}

因为它们不在类型声明中space(如果它们不在名称space中,有没有办法将它们复制到那里?)

我尝试过的另一个选择是使用 outFile + amd 为整个库生成单个 d.ts 文件。但是那个文件不是外部模块。

所以我的问题是 - 如何编写 index.ts 使其成为外部模块并导出库公开的所有功能。

提前致谢。

浪费了一天的时间,我想出了一个丑陋的解决方案。 为了保持导出的 commonjs 库的嵌套结构,你必须在每个 'level' 中放置它自己的 index.ts,它将聚合并重新导出相同 'level' 的所有功能。对于我上面的示例,它看起来像:

—lib ——Helper.ts ——Serialization.ts ——meta ——— index.ts ——— Entity.ts —index.ts

其中root index.ts:

export * from './lib/Helper';
export * from './lib/Serialization';

import * as S from './lib/Serialization'; //This is case where one file contains several exported classes that we want to keen as separate module
export {S as Serialization};

import * as Meta from './lib/meta/index';
export {Meta};

和meta/index.ts:

export * from './Entity';

我真的很高兴知道这个常见的(?)任务是否可以在没有额外文件的情况下解决 'level'。