将 TypeScript NPM 包分解为多个文件而不暴露内部组件

Bau*_*lla 4 node.js npm typescript

我有一个用 TypeScript 编写的 NPM 包,旨在与 Node.js 应用程序一起使用。我在这个包中有一些类,它们的方法仅供内部使用,尽管我无法将它们标记为私有,因为它们被包内的其他组件使用。为了解决这个问题,我不从项目中导出该类,并且当我将类的实例返回给调用者时,我将其类型强制转换为仅具有可公开访问的方法的接口。

这工作正常,但如果我想将我的项目分成更小的文件,我怎样才能做到这一点而不被迫导出我的类,并冒滥用我的 NPM 模块的风险?

这是我正在尝试做的事情的简化示例:

文件:internal.ts

// Can I make this class not publicly accessible?
export class InternalClass {
    constructor() {

    }

    public sharedMethod(): void {
        // Accessible to users of the package
    }

    public protectedMethod(): void {
        // Only for use within the package
    }
}
Run Code Online (Sandbox Code Playgroud)

文件:external.ts

import { InternalClass } from "./internal";

export interface ExternalInterface {
    sharedMethod(): void;
    // protectedMethod is not available outside the package
}

export function makeInterface(): ExternalInterface {
    return new InternalClass();
}
Run Code Online (Sandbox Code Playgroud)

任何关于如何做好这件事的想法将不胜感激。

Ami*_*mid 7

我这样做的方法是通过控制 npm 包所公开的内容。

例如,如果我的package.json看起来像这样:

{
  ....
  "main": "dist/index.js",
  "typings": "typings/index.d.ts",
  ....
}
Run Code Online (Sandbox Code Playgroud)

然后在相应的index.ts我可以手动控制将作为包的一部分公开(导出)的内容。

export * from "./lib/Helper";
export * from "./lib/Log";

import * as M from "./lib/Maps";
export {M as Maps};
Run Code Online (Sandbox Code Playgroud)

如果我有模块/类,我不希望在“外部”访问 - 我只是不将其导出为index.ts或其引用的子级的一部分。这并不禁止我在同一个包中导入和使用它。