新闻详情

新闻详情

首页 / 资讯中心 / 详情

TypeDoc `@inline` / `@inlineType` / `@preventInline` 标签:控制类型别名与接口的内联展开

发布时间:2026/11/16 7:47:04来源:尧图网络
TypeDoc `@inline` / `@inlineType` / `@preventInline` 标签:控制类型别名与接口的内联展开
开发工具文档【免费下载链接】typedocDocumentation generator for TypeScript projects.项目地址https://gitcode.com/gh_mirrors/ty/typedoc点击查看免费下载本文围绕 TypeDoc 的三个文档注释标签inline、inlineType与preventInline展开说明它们如何控制 TypeDoc 在生成文档时把被引用的类型别名/接口展开成字面量类型还是保留为带链接的类型引用。读完本文你将掌握三个标签的适用位置修改器标签 vs 块标签、内联的判定优先级与继承规则以及从源码层面理解 TypeDoc 内联转换的实现链路shouldInline判定、withScope作用域传递、convertTypeInlined展开逻辑与实际限制边界。三个标签的定位与适用场景当文档中某个参数的类型是类型别名type alias或接口时TypeDoc 默认会把该类型渲染为一个指向其定义处的引用reference读者需要跳转才能看到内部结构。如果你希望结构直接摊开在引用处或者恰恰相反想阻止某个被全局内联的类型在特定位置展开就需要这三个标签标签标签种类作用范围作用对象inlineModifier修改器标签加在被引用的类型自身上影响该类型的所有引用处类型别名、接口inlineTypeBlock块标签加在引用方如函数的注释上只影响该声明内的引用任意带注释的声明preventInlineBlock块标签加在引用方的注释上覆盖全局的inline已被inline或inlineType内联的类型在 TypeDoc 的标签注册表中可以确认这一分类inline被列入modifierTags列表而preventInline与inlineType被列入tsdocBlockTags列表见 tsdoc-defaults.ts 与 tsdoc-defaults.ts。这意味着inline无需参数、附着在声明的 modifier 集合上后两者则以标签 类型名的块标签形式出现需要指定要操作的目标类型名不带类型参数。inline让类型在每一处引用点被展开inline标签可以放置在类型别名和接口上。当一个被标注了inline的类型被引用时TypeDoc 会尝试把被引用的类型内联到引用处即像你在源码里直接写开了结构一样。例如/** * inline */ export type HelloProps { /** Name property docs */ name: string; }; /** * Hello component - HelloProps will be inlined here as * if you had written Hello(props: { name: string }) */ export function Hello(props: HelloProps) { return spanHello {props.name}!/span; }在Hello函数的文档中props的类型会直接显示为{ name: string }及其属性注释而不是一个指向HelloProps的链接。使用inline的限制与注意事项并非所有类型都能内联某些情况下带类型参数的类型引用type references with type parameters无法被内联——从源码结构看types.ts 中referenceConverter明确判断如果节点带有typeArguments则忽略inline因为从node.typeName取出的类型无法解析这些实参。非对象字面量/联合/交叉/字面量类型的展开可能是猜测TypeDoc 对非 object literal、union、intersection 或 literal 形状的类型无法保证内联结果准确。如果inline错误地转换了某个类型官方文档建议提交 bug 报告。注意原文档强调如果把这个标签应用到常用类型上可能会显著增大生成的文档体积——因为该类型的注释会在每一个引用处被重复内联。底层实现内联判定的优先级内联决策集中在Context类的shouldInline方法中见 context.tsshouldInline(symbol: ts.Symbol, name: string): boolean { if (this.preventInline.has(name)) return false; if (this.inlineType.has(name)) return true; return this .getComment(symbol, ReflectionKind.Interface) ?.hasModifier(inline) ?? false; }由此可以确认判定优先级为preventInline拒绝 inlineType强制 被引用类型自身的inline修改器。三个集合inlineType、preventInline在Context中声明为会被withScope继承的字段见 context.ts即块标签的作用域会沿转换作用域向下传递。inlineType在单个位置选择性内联inlineType是块标签用于只在某一处内联一个类型引用而不影响该类型的其他引用点。使用时应指定类型名不带类型参数export type HelloProps { name: string; }; /** * Hello component - HelloProps will be inlined here as * if you had written Hello(props: { name: string }) * inlineType HelloProps */ export function Hello(props: HelloProps) { return spanHello {props.name}!/span; }对比inline的差异inline修改的是被引用类型的定义全局生效inlineType修改的是引用它的声明局部生效。这在同一个 props 类型在大多数地方保持链接引用、但某个核心 API 处希望直接展示结构的场景中非常有用。preventInline阻止已被内联的类型再展开preventInline块标签用于指示 TypeDoc不要内联某个已被inline或inlineType内联的类型/** * inline */ export type HelloProps { /** Name property docs */ name: string; }; /** * Hello component - HelloProps will NOT be inlined here * preventInline HelloProps */ export function Hello2(props: HelloProps) { return spanHello {props.name}!/span; }需要注意一个硬性前提TypeDoc 能否恢复为类型引用取决于 TypeScript 编译器本身是否产出了一个命名的类型引用。从源码看types.tsconvertType路径下内联是在拿到具名symbol之后才通过shouldInline分叉的但如果 TypeScript 一开始就没有产出命名引用例如某些被编译器直接展开的别名preventInline无法阻止展开。换言之如果你移除inline后类型仍被内联那preventInline也救不了它——这是 TypeScript 类型系统层面的行为不是 TypeDoc 能控制的。源码实现链路从注释到内联类型节点结合仓库源码完整的内联转换链路如下注释解析阶段块标签preventInline/inlineType作为blockTags存入注释模型inline则作为 modifier 附着在类型声明上。作用域传递Context.withScope()在切换到子声明如函数体、类成员时复制当前的preventInline/inlineType集合并从该 scope 注释的blockTags中追加新的条目见 context.ts。这解释了为什么块标签的作用域是当前声明及其内部而不是全局。引用转换阶段当转换TypeReference节点时types.ts 的convert与convertType两个入口都会调用context.shouldInline(symbol, name)命中则走convertTypeInlined。内联展开convertTypeInlined 按类型形状分别处理——联合类型生成UnionType、交叉类型生成IntersectionType、字面量生成LiteralType、数组生成ArrayType、元组走 tuple 转换器其余情况回退到typeLiteralConverter展开为类型字面量。这也印证了原文档所说对象字面量、联合、交叉、字面量这几类形状最可靠的表述。测试用例佐证仓库内置的行为测试完整覆盖了上述三个标签输入文件为 inlineTag.ts断言位于 behavior.c2.test.tsinline在 TypeNode 上生效type Foo { inlined: true }被标注inline后foo(param: Foo)的参数类型在文档中渲染为{ inlined: true }嵌套场景Recordstring, Foo渲染为Recordstring, { inlined: true }。preventInline覆盖inlinebar2方法标注preventInline Foo后Recordstring, Foo保持引用形式不展开。inlineType选择性内联Bar未标注inline但selectiveInline(bar: Bar)标注inlineType Bar后该处参数类型渲染为{ inlined: false }。带类型参数时inline被忽略测试文件中/** inline */ type ComplexT { real: T; imag: T }与genericInlineT(): ComplexT的组合用于验证泛型引用不会被内联与 types.ts 中有 type arguments 时忽略 inline的实现一致。一个细节测试文件中Class.baz同时标注了preventInline Foo和preventInline Complex说明块标签可以重复使用来排除多个类型。与expand系列标签的区别inline系列操作的是类型引用的展示形态引用 vs 字面量展开而expand系列标签处理的是类型结构的展开层级如expandType展开嵌套的引用。两者正交可以组合使用inline决定这个别名要不要摊开expand决定摊开后内部嵌套的引用展开几层。小结需要所有引用处都展开某个别名/接口 → 在该类型定义上加inline只需要某一处展开 → 在引用方声明上加inlineType 类型名需要取消某处的展开→ 在引用方声明上加preventInline 类型名前提是 TypeScript 本身产出了命名引用内联判定优先级为preventInlineinlineTypeinline块标签作用域随转换作用域继承慎用inline标注高频类型文档体积会随引用次数成倍膨胀。赞分享开发工具文档【免费下载链接】typedocDocumentation generator for TypeScript projects.项目地址https://gitcode.com/gh_mirrors/ty/typedoc点击查看免费下载相关推荐TypeDoc 展开标签深度解析expand、expandType 与 preventExpand 如何控制类型引用的文档展示TypeDoc 展开标签深度解析expand、expandType 与 preventExpand 如何控制类型引用的文档展示 TypeDoc 在渲染文开发工具文档TypeDoc 标签体系详解TypeScript 项目文档注释中的 Block、Modifier 与 Inline 标签TypeDoc 标签体系详解TypeScript 项目文档注释中的 Block、Modifier 与 Inline 标签 TypeDoc 允许开发者在 JSD开发工具文档Omi组件类型定义TypeScript接口与类型别名Omi组件类型定义TypeScript接口与类型别名 在前端开发中组件化是提高代码复用和维护性的重要手段。Omi作为一款现代前端框架提供了丰富的组件类型定前端Web框架UI组件上一篇ebook2audiobook企业版功能详解高级管理与部署特性介绍下一篇终极指南如何用TransmittableThreadLocal和Spring Boot Actuator实现线程上下文监控创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/16 6:47:19

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉