在TS中建立要由TS和JS代码调用的库,并想知道人们如何隐藏内部方法和字段。Java具有程序包可见性来处理此问题。在TS中缺少这一点,我看到两个选择:
定义接口以仅公开某些成员。但这涉及到复制定义和额外的代码以将参数从接口转换为实现类型。
在内部成员上添加一个@private doc注释。可能从生成的文档中排除此类。
注意:专用限定符不是解决方案,因为它仅允许来自同一类的代码访问。我说的是需要访问同一库中其他类的字段,但是要阻止该库的客户端访问。这就是Java的程序包访问功能。
从TypeScript 3.1开始,您可以使用stripInternal编译器选项。生成声明文件时,这将停止为具有@internalJSDoc批注的代码生成声明。
可以在tsconfig.json文件中启用此编译器选项:
{
"compilerOptions" : {
...
"stripInternal": true
}
}
Run Code Online (Sandbox Code Playgroud)
例如,以下声明将被取消:
//Class will not be visible
/** @internal */
export class MyHelperClass {
}
export class MyPublicClass {
//Method will not be visible
/** @internal */
helperMethod() {}
}
// Binding will not be visible
/** @internal */
export const MyValue = 5;
Run Code Online (Sandbox Code Playgroud)
但是,这不会影响查看*.ts源文件的代码,例如您自己的代码。
如果像大多数NPM软件包一样以包*.js和*.d.ts文件的形式分发包,这将有效地将成员隐藏在包外部的代码中。但是,如果您将代码作为*.ts文件分发,将无济于事。
private。请注意,由于基于原型的语言,最终 JavaScript 中的所有内容都是相当公开的。也没有实际的名称空间。所以也许你不应该太担心。好的文档总是有帮助的。
顺便说一句,了解还有其他很棒的转译器(例如 TypeScript)可能会很有趣。例如,Haxe 更优雅地解决了这个问题,因为它们更面向 OOP 的语言设计,您可以使用访问修饰符之上的元数据来授予和请求访问权限。您可能会发现使用 Java 更方便。尽管如此,最终一切都会因为 JavaScript 而公开。
| 归档时间: |
|
| 查看次数: |
3328 次 |
| 最近记录: |