TS と JS コードから呼び出されるライブラリを TS で構築し、内部メソッドとフィールドを非表示にする方法を知りたいです。Java にはこれを処理するためのパッケージ可視性があります。TS にはそれがないため、2 つのオプションがあります。
特定のメンバーのみを公開するようにインターフェースを定義します。ただし、これには定義の複製と、インターフェースから実装タイプに引数をキャストするための追加コードが含まれます。
内部メンバーに @private ドキュメントコメントを配置します。生成されたドキュメントからこれを除外することもできます。
注: private 修飾子は、同じクラスのコードへのアクセスのみを許可するため、解決策ではありません。同じライブラリ内の他のクラスのフィールドにアクセスする必要性について話しているのですが、ライブラリのクライアントからのアクセスは禁止されています。これが、Java のパッケージ アクセスの機能です。
ベストアンサー1
TypeScript 3.1 以降では、stripInternal
コンパイラ オプションを使用できます。宣言ファイルを生成するときに、これにより、JSDoc アノテーションを持つコードの宣言が生成されなくなります@internal
。
このコンパイラ オプションは次のファイルで有効にできますtsconfig.json
。
{
"compilerOptions" : {
...
"stripInternal": true
}
}
たとえば、次の宣言は抑制されます。
//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;
*.ts
ただし、これは、独自のコードなど、ソース ファイルを参照するコードには影響しません。
*.js
ほとんどの NPM パッケージのように、パッケージをと のファイルの組み合わせとして配布すると*.d.ts
、パッケージ外のコードからメンバーが効果的に隠されます。ただし、コードを*.ts
ファイルとして配布する場合は役に立ちません。