ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

TypeDoc 中 @alpha 修饰符标签详解:标记未稳定 API、级联传播与可见性过滤

TypeDoc 中 @alpha 修饰符标签详解:标记未稳定 API、级联传播与可见性过滤 开发工具文档【免费下载链接】typedocDocumentation generator for TypeScript projects.项目地址https://gitcode.com/gh_mirrors/ty/typedoc点击查看免费下载本文围绕 TypeDoc 的alpha标签展开讲解它在 TypeDoc 标签体系中的定位modifier 修饰符标签、在注释解析管线中的存储与处理方式、独有的“级联到子反射”行为以及如何配合visibilityFilters选项在生成的文档站点中控制 alpha 成员的可见性。读完后你可以准确使用alpha标注处于稳定化观察期的 API 成员理解它与beta、experimental、public的互斥关系并通过源码与测试用例验证其实际行为。一、alpha 是什么一个 Modifier 修饰符标签TypeDoc 官方文档对alpha的定义见 site/tags/alpha.mdThis tag can be used to indicate that the associated member is intended to eventually be used by third-party developers but is not yet stable enough to conform to semantic versioning requirements.即alpha用于表明某个成员最终打算供第三方开发者使用但当前尚未稳定到可以遵循语义化版本semver承诺的程度。它是 TSDoc 标准的一部分TypeDoc 在官方标签参考中将其归类为 Modifier 修饰符标签。理解alpha的关键在于“修饰符标签”这一类别。根据 标签总览TypeDoc 的标签分为三类标签类别特征示例Block Tags与后续文本关联可把文档划分为章节、提供示例remarks、example、groupModifier Tags无关联内容只设置一个二元标志改变反射的处理方式alpha、beta、hidden、internalInline Tags标记段落内文本供 TypeDoc 特殊处理link、inheritDoc、labelalpha属于第二类它不携带正文内容只设置一个“该成员处于 alpha 阶段”的标志位从而改变 TypeDoc 对反射Reflection的处理与渲染方式。alpha与interface这类修饰符标签可以共用一条注释例如 标签总览 中的示例/** * Summary * * alpha * interface */ export type Foo { a: string };二、基本用法官方文档给出的最小示例export class Visibility { /** alpha */ newBehavior(): void; }运行 TypeDoc 后newBehavior方法会在生成的文档页面中以 alpha 标识呈现。由于alpha是无内容的修饰符标签只需在文档注释中写出alpha即可无需任何正文。三、alpha 在标签体系中的注册与解析3.1 标签分类进入 TSDoc 修饰符标签列表alpha之所以能被 TypeDoc 识别为合法的修饰符标签是因为它注册在默认标签列表中。在 TSDoc 默认标签定义 中可以看到tsdocModifierTags常量包含alpha及同一语义家族的其它标签// src/lib/utils/options/tsdoc-defaults.ts节选 export const tsdocModifierTags [ alpha, beta, eventProperty, experimental, internal, override, packageDocumentation, public, readonly, sealed, virtual, ] as const;该列表随后被并入modifierTags选项的默认值见 src/lib/utils/options/defaults.ts 中的modifierTags导出。这也意味着如果在注释中写了未在此类列表中注册的标签TypeDoc 会将其当作未知标签并可能产生警告——而alpha是 TSDoc 标准标签始终受支持。3.2 存储方式Comment.modifierTags 集合解析后的修饰符标签统一存放在Comment模型的modifierTags集合中。在 Comment 模型 中/** * All modifier tags present on the comment, e.g. alpha, beta. */ modifierTags: SetTagString new Set();Comment类同时提供了hasModifier(tagName)与removeModifier(tagName)两个方法见 src/lib/models/Comment.ts#L578-L584转换器中的各类插件正是通过这些方法检查某个成员是否带alpha标志。序列化时非空的modifierTags会被写入 JSON 输出的Comment对象toObject方法因此在typedoc --json的输出中可以直接看到modifierTags: [alpha]这是验证标签是否被正确解析的直观方式。四、alpha 的独有能力级联传播到子反射alpha与一般修饰符标签最重要的差别是它默认属于级联修饰符标签cascaded modifier tags。在 默认选项 中// src/lib/utils/options/defaults.ts export const cascadedModifierTags: readonly TagString[] [ alpha, beta, experimental, ];这三个标签的语义相同表示“未稳定”因此被一起级联如果父反射如命名空间、模块带有这些标签其所有子反射也会自动获得同样的标志。对应的处理逻辑在 CommentPlugin 的cascadeModifiers方法中见 src/lib/converter/plugins/CommentPlugin.ts#L558-L579private cascadeModifiers(reflection: Reflection) { const parentComment reflection.parent?.comment; if (!parentComment || reflection.kindOf(ReflectionKind.TypeLiteral)) { return; } const childMods reflection.comment?.modifierTags ?? new Set(); for (const mod of this.cascadedModifierTags) { if (parentComment.hasModifier(mod)) { const exclusiveSet MUTUALLY_EXCLUSIVE_MODIFIERS.find((tags) tags.has(mod)); if ( !exclusiveSet || Array.from(exclusiveSet).every((tag) !childMods.has(tag)) ) { reflection.comment || new Comment(); reflection.comment.modifierTags.add(mod); } } } }从源码结构看级联行为有三个要点仅当父反射注释中带有alpha/beta/experimental时才触发类型字面量TypeLiteral不继承级联标志子反射自身的互斥标签优先如果子成员已经标注了同组内的其它修饰符例如父级是beta而子成员显式标了alpha父级标志不会覆盖子成员的选择。仓库中的行为测试 cascadedModifiers.ts 精确验证了这三点/** * beta */ export namespace BetaStuff { export class AlsoBeta { betaFish() {} /** alpha */ alphaFish() {} } } /** alpha beta */ export const mutuallyExclusive true;在该测试中命名空间BetaStuff标注beta其内部的AlsoBeta类与betaFish方法会级联获得beta而alphaFish因显式声明了alpha不会被父级的beta覆盖。这给出了一个实用的组织模式在命名空间或模块层面统一声明稳定性等级个别成员可单独升降级。另外需要注意一个细节在 CommentPlugin 的onResolve钩子中src/lib/converter/plugins/CommentPlugin.ts#L481-L487若函数/变量拥有恰好一个签名级联标签会从外层反射上被移除只保留在签名反射上避免同一标志在文档中重复显示。cascadedModifierTags本身是可配置的选项定义见 选项源帮助文本为“Modifier tags which should be copied to all children of the parent reflection”即“需要从父反射复制至所有子反射的修饰符标签”因此你可以调整哪些标签参与级联例如把自定义的稳定性标签加入其中。五、互斥校验alpha 不能与 beta / experimental / internal / public 同时使用由于alpha、beta、experimental语义上都表示“不稳定”而public表示“稳定、遵循 semver”TypeDoc 把这几个标签编入同一个互斥组。在 CommentPlugin 中// src/lib/converter/plugins/CommentPlugin.ts节选 const MUTUALLY_EXCLUSIVE_MODIFIERS [ new SetTagString([ alpha, beta, experimental, internal, public, ]), ] as const;在解析阶段onResolve会对每条注释检查互斥组内的交集src/lib/converter/plugins/CommentPlugin.ts#L423-L438一旦同一条注释中出现组内两个及以上标签例如/** alpha beta */TypeDoc 会输出警告本地化文案为“修饰符标签 {0} 与 {2} 注释中的 {1} 互斥”见 中文语言包 中的modifier_tag_0_is_mutually_exclusive_with_1_in_comment_for_2。前文测试中的/** alpha beta */ export const mutuallyExclusive true;正是为触发这条警告而设计的用例。因此实践上的规则是同一成员在同一时刻只能处于一个稳定性等级要升级 API 成熟度时应替换标签而不是叠加标签。六、渲染与可见性控制6.1 页面渲染以标签徽章形式展示默认主题渲染注释时会把注释上所有未被排除的修饰符标签输出为code classtsd-tag徽章。相关逻辑在 comment 模板 的reflectionFlags函数中// src/lib/output/themes/default/partials/comment.tsx节选 export function reflectionFlags(context: DefaultThemeRenderContext, props: Reflection) { const flagsNotRendered context.options.getValue(notRenderedTags); const allFlags props.flags.getFlagStrings(); if (props.comment) { for (const tag of props.comment.modifierTags) { if (!flagsNotRendered.includes(tag)) { allFlags.push(translateTagName(tag)); } } } return join( , allFlags, (item) code classtsd-tag{item}/code); }也就是说带alpha的成员的文档页面会显示一个 “alpha” 徽章读者一眼即可识别该成员尚未稳定。若不希望某个标签出现在页面上可通过notRenderedTags选项将其排除alpha不在默认排除列表中默认会显示。6.2 visibilityFilters让访问者过滤掉 alpha 成员alpha与--visibilityFilters选项配合使用时可以在文档站点的页面过滤器中提供“隐藏 alpha 成员”的能力。输出选项文档 给出了标准示例// typedoc.json { visibilityFilters: { protected: false, private: false, inherited: true, external: false, alpha: false, beta: false } }该选项控制页面顶部“可用过滤器”。其中protected、private、inherited、external四个选项默认都会展示将它们设为默认值或从配置中省略可以禁用对应过滤器。更关键的是可以为任意修饰符标签包括alpha、beta声明自定义过滤器让文档读者在浏览时一键隐藏所有处于 alpha/beta 阶段的 API从而只查看稳定接口——这正是 site/tags/alpha.md 在 “See Also” 中专门列出该选项的原因。七、alpha 与同族标签的对比与选择TypeDoc 文档在alpha条目中给出了同族标签的交叉引用beta、experimental、public它们在 TypeDoc 内部的行为高度一致差异主要在语义定位标签语义定位级联默认互斥组与public的关系alpha计划公开但远未稳定行为可能随时大改是是互斥beta计划公开、基本可用但细节仍可能变化是是互斥experimental与beta语义等价TSDoc 规范将两者视为等价是是互斥public已稳定遵循语义化版本承诺否是本身internal仅供内部使用否是互斥从 CommentPlugin 源码 可见TypeDoc 并不强制规定三者必须如何区分使用beta 标签文档 也说明 TSDoc 规范要求beta与experimental被视为语义等价用户“应使用其一而非两者同时使用”。推荐的稳定性演进路径是alpha早期实现、可能大改→beta或experimental接口趋稳、收集反馈→ 移除标签或改为public正式承诺 API 稳定性。八、验证清单使用alpha后可通过以下方式确认其行为符合预期均以当前仓库内容为准解析验证运行typedoc --json生成 JSON 输出检查目标成员的comment.modifierTags是否包含alpha序列化逻辑见 Comment.toObject级联验证参照 cascadedModifiers 行为测试 的结构在命名空间上标注beta/alpha确认子成员获得级联标志、显式标注的子成员不被覆盖互斥警告给同一成员写/** alpha beta */TypeDoc 会在构建日志中输出互斥警告渲染验证在生成的 HTML 中检查成员页面是否出现tsd-tag徽章过滤器验证配置visibilityFilters中的alpha: false确认文档站点出现对应的可见性过滤器且能过滤 alpha 成员配置说明见 site/options/output.md。小结alpha是 TypeDoc 标签体系中一个“小而关键”的修饰符标签它本身只是一行注释却串联起 TSDoc 标签注册tsdoc-defaults.ts、注释模型Comment.ts、级联传播与互斥校验CommentPlugin.ts、页面徽章渲染comment.tsx与可见性过滤visibilityFilters一整条链路。对维护公共库的团队而言用alpha明确标注不稳定成员并开放过滤器是向使用者传达 API 成熟度、降低误用风险的低成本手段。赞分享开发工具文档【免费下载链接】typedocDocumentation generator for TypeScript projects.项目地址https://gitcode.com/gh_mirrors/ty/typedoc点击查看免费下载相关推荐Mojo 语言 stable 装饰器标准库 API 稳定性标记的设计与实现Mojo 语言 stable 装饰器标准库 API 稳定性标记的设计与实现 导读 本文以 Mojo 编译器仓库Modular 平台中已受理的技术提案 s人工智能大模型编程语言编译器标准库算子库模型推理服务模型量化HashiCorp Boundary中的Worker标签与过滤机制详解HashiCorp Boundary中的Worker标签与过滤机制详解 痛点如何精准控制会话路由 在复杂的网络环境中Boundary管理员经常面临这样的挑CSWin Transformer训练爆显存怎么办梯度检查点、批大小与学习率调优实战指南CSWin Transformer训练爆显存怎么办梯度检查点、批大小与学习率调优实战指南 CSWin Transformer CVPR 2022 通用视觉上一篇Agentic Awesome Skills 中的 API 文档生成从代码到完整 API 文档的自动化工作流下一篇ONNX自定义操作符开发指南从PyTorch到ONNX Runtime完整流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表