Rush Stackショップブログイベント
メインコンテンツへスキップ

ae-forgotten-export

"シンボル がエントリポイント からエクスポートされる必要があります。"

備考

このメッセージは、エクスポートされたAPIが、エクスポートされていない別の宣言を参照している場合に報告されます。

ライブラリの mainEntryPointFilePath./src/index.ts であり、次のコードが含まれていると仮定します。

// uncallable forgotten export
enum ReportType {
Full,
Condensed
}

// forgotten export
interface IShowReportOptions {
reportTitle: string;
validation?: boolean;
reportType?: ReportType;
}

/**
* Shows a report.
* @public
*/
export function showReport(options: IShowReportOptions): void {}

// Warning: "The symbol "IShowReportOptions" needs to be exported by the entry point src/index.d.ts."

上記の例では、showReport() の型シグネチャは、エントリポイントによってエクスポートされていないインターフェイス IShowReportOptions を参照しています。インターフェイスには export キーワードがありません。これは有効なTypeScriptコードですが、API設計の観点からいくつかの問題を引き起こします。

  • サードパーティが型を宣言できない:たとえば、このAPIのコンシューマーが options オブジェクトを作成するヘルパー関数 getDefaultReportOptions() を作成したいと仮定します。IShowReportOptions 宣言をインポートできないため、関数の戻り値にアノテーションを付ける簡単な方法はありません。

  • 型はドキュメント化するのが面倒: IShowReportOptions はエクスポートされないため、通常は、このライブラリ用に生成されるAPIドキュメントには含まれません。代わりに、情報は showReport() のドキュメントコメントに何らかの形で組み込む必要があります。これは面倒です。また、いくつかの異なる関数がこのインターフェイスを使用する場合はどうなるでしょうか?

  • APIが呼び出し不可能になる可能性がある: ReportType 列挙型の場合、列挙型をインポートできないため、コンシューマーはこの列挙型のメンバーを実際には使用できません。したがって、IShowReportOptions.reportType 値をまったく指定する方法がありません。また、reportType はオプションのパラメータであるため、この不幸な見落としは、誰かが最終的にバグを報告するまで長い間気付かれない可能性があります。

ae-forgotten-export 検証は、これらの問題を特定し、事前に修正するのに役立ちます。

API Extractorは、ライブラリが単一のエントリポイントを持っているものとしてモデル化することに注意してください。たとえば、ReportType を別のファイルに移動し、./src/index.tsimport { ReportType } from './ReportType'; などのステートメントを使用してインポートしたとします。この場合、列挙型は ./src/ReportType.ts によって「エクスポート」されますが、ae-forgotten-export メッセージが報告されます。ReportType 列挙型は、メインのエントリポイントによってエクスポートされる必要があります。

修正方法

export キーワードを使用して、メインのエントリポイントファイル(mainEntryPointFilePath 設定で指定)から宣言をエクスポートします。

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

参考資料