ae-forgotten-export
"符号 ** 需要由入口点导出 **."
备注
当导出的 API 引用另一个未导出的声明时,会报告此消息。
示例
假设您的库将 **./src/index.ts** 作为 mainEntryPointFilePath
,并且它包含以下代码
// 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 的使用者想要创建一个辅助函数
getDefaultReportOptions()
来创建options
对象。由于他们无法导入IShowReportOptions
声明,因此他们没有简单的方法来注释其函数的返回值。**该类型难以记录:** 由于
IShowReportOptions
未导出,因此它通常不会包含在为此库生成的 API 文档中。相反,信息需要以某种方式并入showReport()
的文档注释中,这可能很麻烦。如果多个不同的函数使用此接口怎么办?**API 可能无法调用:** 在
ReportType
枚举的情况下,由于该枚举无法导入,因此使用者实际上无法使用该枚举的成员。因此,他们根本没有办法指定IShowReportOptions.reportType
值。此外,reportType
是一个可选参数,因此这个不幸的疏忽可能会在很长一段时间内不被注意到,直到有人最终报告这个错误。
ae-forgotten-export
验证可以帮助您识别这些问题并主动解决它们。
请记住,API 提取器将您的库视为具有单个入口点。例如,假设我们将 ReportType
移到另一个文件中,并且我们的 **./src/index.ts** 使用类似于 import { ReportType } from './ReportType';
的语句导入它。在这种情况下,虽然该枚举由 **./src/ReportType.ts** "导出",但 ae-forgotten-export
消息仍然会报告;ReportType
枚举需要由主入口点导出。
如何修复
使用 export
关键字从主入口点文件(由 mainEntryPointFilePath
设置指定)导出该声明。
或者,如果更改您的 API 签名会过于繁琐,您只需选择忽略此消息。默认情况下,它使用 addToApiReportFile
报告,这意味着它将被写入您的 API 报告以供跟踪。它不会产生控制台警告,因此不会破坏您的构建(假设您将 apiReport.enabled
设置为 true)。