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.ts が import { ReportType } from './ReportType';
などのステートメントを使用してインポートしたとします。この場合、列挙型は ./src/ReportType.ts によって「エクスポート」されますが、ae-forgotten-export
メッセージが報告されます。ReportType
列挙型は、メインのエントリポイントによってエクスポートされる必要があります。
修正方法
export
キーワードを使用して、メインのエントリポイントファイル(mainEntryPointFilePath
設定で指定)から宣言をエクスポートします。
または、APIシグネチャの変更が大きすぎる場合は、このメッセージを無視することもできます。デフォルトでは addToApiReportFile
レポートを使用します。これは、追跡のためにAPIレポートに書き込まれることを意味します。コンソール警告は生成されないため、ビルドは中断されません(apiReport.enabled
がtrueに設定されていると仮定)。