我有一个用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
}
}
档案: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();
}
非常感谢任何有关如何做到这一点的想法。
答案 0 :(得分:0)
我这样做的方法是控制npm包暴露的内容。
例如,如果我的package.json
看起来像这样:
{
....
"main": "dist/index.js",
"typings": "typings/index.d.ts",
....
}
然后在相应的index.ts
中我可以手动控制将作为包的一部分公开(导出)的内容。
export * from "./lib/Helper";
export * from "./lib/Log";
import * as M from "./lib/Maps";
export {M as Maps};
如果我有模块/课程,我不想访问"外部" - 我只是不将它作为index.ts
或其引用子项的一部分导出。这并不禁止我在同一包内部导入和使用它。