ae-incompatible-release-tags
"符号 标记为 ,但其签名引用 标记为 ."
备注
TSDoc 的“发布标签”根据其可见性形成排序
@public
> @beta
> @alpha
> @internal
例如,当应用 .d.ts 修剪时,“beta”发布将包含标记为 @public
或 @beta
的声明,但会省略标记为 @alpha
或 @internal
的声明。这可以防止开发人员意外使用 @alpha
或 @internal
声明。
但假设我们有一个这样的 API
/**
* Not visible in a "beta" release.
* @alpha
*/
export ICalculateOptions {
numerator: number;
denominator: number;
}
/**
* Visible in a "beta" release.
* @beta
*/
export function calculate(options: ICalculateOptions): void { // <-- problem!
}
// Warning: The symbol "calculate" is marked as "@beta", but its signature references
// "ICalculateOpations" which is marked as "@alpha"
当开发人员使用“beta”发布时,他们将无法访问调用 calculate()
函数所需的 ICalculateOptions
类型。这不好!
类似地,假设 @beta
类要继承自 @alpha
类
/**
* Not visible in a "beta" release.
* @alpha
*/
export class Control {
public constructor(x: height, y: width) {}
}
/**
* Visible in a "beta" release.
* @beta
*/
export class Button extends Control {
// <-- problem!
}
// Warning: "The symbol "Button" is marked as "@beta", but its signature references
// "Control" which is marked as "@alpha"
当开发人员使用“beta”发布时,他们不应该使用 Control
类型,因为它被标记为 @alpha
。但是,他们如何构造依赖于它的 Button
类实例?
有趣的是,考虑当标签反转时会发生什么
/**
* Visible in a "beta" release.
* @beta
*/
export class Control {
public constructor(x: height, y: width) {}
}
/**
* Not visible in a "beta" release.
* @alpha
*/
export class Button extends Control {
// <-- okay
}
在这个例子中,“beta”发布隐藏了 Button
类,但开发人员仍然可以完全使用基类 Control
。所以这里没有不兼容性。
总的来说,这里的原则是类型签名不应该引用发布标签可见性较低的其他类型。API 提取器会为您检查这一点,如果检测到不一致,它会报告 ae-incompatible-release-tags
。
如何修复
更正发布标签,使关系一致。