Rush Stackショップブログイベント
本文へ移動

ae-internal-missing-underscore

"名前___は、宣言が@internalとしてマークされているため、アンダースコアを前に付ける必要があります。

備考

宣言が`@internal`としてマークされている場合、名前の先頭にアンダースコア文字("_").

例えば、**widget-lib**というライブラリがあり、次のような宣言をエクスポートしているとします。

/**
* @internal
*/
export class Widget {
public render(): void {}
}

/**
* @public
*/
export class WidgetManager {
/**
* @internal
*/
public initialize(): void {}
}

// Warning: The name "Widget" should be prefixed with an underscore because
// the declaration is marked as @internal.
// Warning: The name "initialize" should be prefixed with an underscore because
// the declaration is marked as @internal.

呼び出し元がこのAPIを使用しようとすると、内部APIであることに気付かず、`Widget`または`initialize`を誤って使用しようとする可能性があります。API Extractorの.d.tsトリミング機能は、これらの宣言をTypeScript IntelliSenseから削除することで役立ちますが、この機能を使用していない場合、または型チェックを実行しないJavaScriptコードによってライブラリが使用されている場合はどうでしょうか?

これらの宣言にアンダースコアを追加すると、これらのAPIに何か特別な点があることがすぐに明らかになります。

/**
* @internal
*/
export class _Widget {
// This method is @internal, but we don't add an underscore because
// the container already has an underscore:
public render(): void {}
}

/**
* @public
*/
export class WidgetManager {
/**
* @internal
*/
public _initialize(): void {}
}

利用者のコードは次のようになる可能性があります。

import { _Widget, WidgetManager } from 'widget-lib';

let widget = new _Widget(); // <-- bad

let widgetManager = new WidgetManager();
widgetManager._initialize(); // <-- bad

アンダースコアを使用することで、この間違いを見つけやすくなります。

`Widget`クラスのすべてのメンバーにアンダースコアを追加する必要はありません。TypeScriptでは、コンテナを参照せずにこれらの項目にアクセスできないため、冗長になります。したがって、API Extractorは最外部の`@internal`コンテナについてのみ`ae-internal-missing-underscore`をチェックします。

修正方法

内部宣言の名前がアンダースコアで始まるように名前を変更します。

または、APIシグネチャの変更が大きすぎる場合は、このメッセージを無視することもできます。デフォルトでは`addToApiReportFile`レポートを使用するため、追跡のためにAPIレポートに書き込まれます。コンソール警告は生成されず、ビルドが中断されることはありません(`apiReport.enabled`がtrueに設定されていると仮定)。