首页/新闻资讯/正文详情

TypeDoc `@useDeclaredType` 标签详解:用声明类型转换派生类型别名

发布时间:2026/9/26 15:45:45 来源:云帆数科 栏目:资讯中心
TypeDoc `@useDeclaredType` 标签详解:用声明类型转换派生类型别名
开发工具文档【免费下载链接】typedocDocumentation generator for TypeScript projects.项目地址https://gitcode.com/gh_mirrors/ty/typedoc点击查看免费下载useDeclaredType是 TypeDoc 提供的一个修饰型Modifier标签专门用于指导类型别名的文档化方式当类型别名基于ReturnType、typeof、泛型实例化等派生表达式时它能让 TypeDoc 优先使用 TypeScript 编译器解析出的声明类型declared type来生成文档而不是直接照搬源码中的类型节点type node从而显著改善派生类型的可读性。本文以 TypeDoc 官方标签文档为主体结合 转换器源码 与 行为测试用例 的源码级证据完整讲解该标签的用法、底层实现原理、适用场景与已知边界。标签定位一个修饰型Modifier标签useDeclaredType在 TypeDoc 的标签体系中属于Modifier修饰符类别见 tags.md。所谓修饰标签是指那些不携带正文内容、仅以开关方式改变转换行为的标签与其同类的还有interface、namespace、reexport、expand等。从仓库配置可以印证这一点在 tsdoc-defaults.ts 的modifierTags数组中useDeclaredType与abstract、class、interface、namespace、reexport等标签并列注册第 98 行在项目根目录的 tsdoc.json 中该标签被声明为syntaxKind: modifier即按修饰符语法解析在 中文语言包 中它被翻译为tag_useDeclaredType: 使用声明类型这也直接点明了标签的语义使用声明类型。核心语义声明类型 vs 类型节点默认情况下TypeDoc 在把类型别名转换成文档时读取的是该别名声明的type node——也就是你在源码里写出的那一段类型表达式。但对于派生类型derived types源码中写出的往往是一个计算过程而非最终结果。useDeclaredType的作用就是告诉 TypeDoc不要照抄源码中的类型表达式而是用 TypeScript 编译器对符号求值得到的声明类型来转换。TypeDoc 官方文档的原话是This tag can be specified on type aliases to tell TypeDoc to convert them using the declared type rather than the type node. This can result in better documentation for derived types.需要注意的是该标签只对类型别名type alias生效如果标注在其它声明上类、接口、函数、变量等TypeDoc 会忽略它不产生任何效果。源码级实现原理在 src/lib/converter/symbols.ts 中类型别名的转换逻辑完整地体现了这一语义。简化后的关键代码路径如下if (ts.isTypeAliasDeclaration(declaration)) { const comment context.getComment(symbol, ReflectionKind.TypeAlias); // ... reexport 与 interface 的先行判断 ... const reflection context.createDeclarationReflection( ReflectionKind.TypeAlias, symbol, exportSymbol, ); context.finalizeDeclarationReflection(reflection); if (reflection.comment?.hasModifier(useDeclaredType)) { reflection.comment.removeModifier(useDeclaredType); reflection.type context.converter.convertType( context.withScope(reflection), context.checker.getDeclaredTypeOfSymbol(symbol), // ← 声明类型 ); } else { reflection.type context.converter.convertType( context.withScope(reflection), declaration.type, // ← 类型节点 ); } // ... 后续联合类型注释、对象字面量提升等处理 ... }从中可以提取出三条实现事实入口限制useDeclaredType的检查位于ts.isTypeAliasDeclaration(declaration)分支内部symbols.ts因此该标签天然只作用于类型别名——这与文档中标注在其他声明上无效的描述严格对应。类型来源切换默认路径使用declaration.type源码类型节点调用convertType带标签时改用context.checker.getDeclaredTypeOfSymbol(symbol)TypeScript 编译器解析出的声明类型。这是整个标签行为差异的核心。修饰符清理转换完成后会通过reflection.comment.removeModifier(useDeclaredType)将该修饰符从注释中移除避免它被渲染进最终文档页面symbols.ts。此外useDeclaredType与interface在实现上是平级且互斥的关系interface的检查comment?.hasModifier(interface)先行执行命中后直接走convertTypeAliasAsInterface分支返回只有未命中interface时才会走到useDeclaredType的判断symbols.ts。典型使用场景派生类型别名的文档化useDeclaredType最典型的应用场景是那些无法直接写出、必须通过类型运算得到的别名。官方文档给出了如下示例function getData() { return [{ abc: 123 }]; } /** useDeclaredType */ export type Data ReturnTypetypeof getData; // Data 将被文档化为等价于手写 export type DataManual { abc: number }[];不使用该标签时TypeDoc 会在文档中显示ReturnTypetypeof getData这一原始的运算表达式——它对阅读文档的开发者而言既不直观也无法直接获知结构加上useDeclaredType后TypeDoc 直接展开为{ abc: number }[]文档清晰可读。这一行为在仓库测试中得到了精确验证。测试夹具 useDeclaredTypeTag.ts 复用了getData与Data的示例代码而 behavior.c2.test.ts 中的用例断言了转换结果it(Handles the useDeclaredType tag on types, () { const project convert(useDeclaredTypeTag); const data query(project, Data); equal(data.type?.toString(), { abc: number }[]); });即带useDeclaredType的Data其最终渲染类型必须是展开后的{ abc: number }[]而非ReturnTypetypeof getData。这为标签的预期行为提供了可回归验证的自动化保障。已知约束与边界何时不该使用官方文档明确警告使用该标签并非总是得到更好的文档其输出存在以下不稳定因素跨版本不稳定带此标签的输出在不同 TypeScript 版本之间或类型内部发生非常微小的变化时都可能随之改变可能反而更差取决于类型别名的具体写法使用该标签后文档质量可能比默认方式更差最常见的错误形态类型被文档化为对自身的引用a reference to itself即展开结果变成递归引用自身别名破坏可读性。官方示例同时给出了一个明确不适用的反例——映射类型mapped type// 这种方式不幸地不会按预期工作 export type Bar { a: string }; /** useDeclaredType */ export type BarNum { [K in keyof Bar]: number };对BarNum这类基于keyof的映射类型声明类型展开后往往会产生难以预期的结果因此并不适合使用该标签。这也提醒开发者先在小范围内实验确认生成的文档符合预期后再推广使用并建议在文档构建流程中检查渲染结果防止类型展开引入自引用等退化情况。与interface标签的配合关系useDeclaredType与interface标签在功能上有互补关系二者可以视为类型别名文档化的两种改写手段interface将类型别名转换为接口形态展示把 Record、映射等动态属性展开为真实属性成员useDeclaredType将类型别名按编译器求值后的声明类型展示适用于派生类型如ReturnType。在 interface.md 文档 的 See Also 一节中两个标签互相引用说明官方将其视为一组相关的修饰标签。实际使用中如果目标是让派生类型展示出数据结构的真实形态useDeclaredType是直接答案如果目标是让类型别名以接口语义呈现并支持成员级注释则应考虑interface可参考 interface.md 中的Recorda | b | c, string展开示例。相关资源继续深入探索时可在当前仓库中参考以下内容官方标签总览tags.md标签原始文档useDeclaredType.md转换器核心实现src/lib/converter/symbols.ts修饰标签注册表src/lib/utils/options/tsdoc-defaults.tsTSDoc 配置声明tsdoc.json行为测试用例src/test/behavior.c2.test.ts测试夹具源码src/test/converter2/behavior/useDeclaredTypeTag.ts中文语言包翻译src/lib/internationalization/locales/zh.ts赞分享开发工具文档【免费下载链接】typedocDocumentation generator for TypeScript projects.项目地址https://gitcode.com/gh_mirrors/ty/typedoc点击查看免费下载相关推荐Neovim 中如何安装 jdtls 并用 nvim-lspconfig 启用 Java 语言服务器Neovim 中如何安装 jdtls 并用 nvim lspconfig 启用 Java 语言服务器 目标是在 Neovim 中为 Java 项目启用 Ecli开发工具文档Roc 编译器局部类型声明详解块级作用域的类型别名、名义类型与不透明类型Roc 编译器局部类型声明详解块级作用域的类型别名、名义类型与不透明类型 本文基于 roc 语言仓库中的编译快照测试 test/snapshots/type_TypeDoc template 标签完全指南为 JavaScript 泛型函数与类型别名编写类型参数文档TypeDoc template 标签完全指南为 JavaScript 泛型函数与类型别名编写类型参数文档 template 是 TypeDoc 文档生成开发工具文档上一篇waifu2x-caffe教育资源高校计算机视觉课程实践指南下一篇FastSAM完整升级指南从v1.0到v2.0的10大新功能解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Search 浏览器内置广告拦截器指南:WKContentRuleList 网络层拦截为何零开销
Search 浏览器内置广告拦截器指南:WKContentRuleList 网络层拦截为何零开销

Search 浏览器内置广告拦截器指南:WKContentRuleList 网络层拦截为何零开销 【免费下载链接】Search A small, fast WebKit browser for macOS, by Office Commun. 项目地址: https://gitcode.com/gh_mirrors/search59/Search Search 是一款轻量快速的 macOS … · 2026/9/26 15:45:45

TB9120AFTG驱动双极步进电机:原理、调参与实战总结
TB9120AFTG驱动双极步进电机:原理、调参与实战总结

双极步进电机这个东西,在很多自动化项目里都是“看起来简单、用起来闹心”的典型。给它一个脉冲它就转一个角度,听起来毫无难度,但真开始做之后,噪音、发热、丢步、共振,一套组合拳下来能把人折腾到怀疑人生。这段时间… · 2026/9/26 15:45:45

接近开关选型接线与故障排除实战指南
接近开关选型接线与故障排除实战指南

1. 接近开关到底是个什么东西干自动化这行十几年,接近开关是我见过最“不起眼但离了它真不行”的元件之一。它不像PLC那样引人注目,也不像伺服电机那样动辄上热搜,但产线上十台设备里有八台都藏着它——限位、计数、测速、定位、安全门检测&a… · 2026/9/26 15:45:45

E2-10G网络测试模块:全速率、超线速与深协议解析技术解析
E2-10G网络测试模块:全速率、超线速与深协议解析技术解析

1. 这块“E2-10G”到底在解决什么真问题?“全速率超线速深协议”——这九个字不是宣传稿里的空洞口号,而是我过去三年在数据中心网络测试现场反复摔打出来的痛点清单。去年底给一家头部云厂商做400G交换机压力验证时,我们卡在了一个极其尴尬的… · 2026/9/26 16:26:35

Cursor 使用教程:从安装、订阅到高级技巧,附 TaoToken 统一 Key 配置
Cursor 使用教程:从安装、订阅到高级技巧,附 TaoToken 统一 Key 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 16:26:35

cursor打开文本中文乱码解决方法:settings.json 配 TaoToken 统一 Key 通道
cursor打开文本中文乱码解决方法:settings.json 配 TaoToken 统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 16:26:35

统计信息搜集加SQL硬编码导致library cache lock 和cursor pin wait on x:TaoToken统一Key通道下的诊断配置与验证
统计信息搜集加SQL硬编码导致library cache lock 和cursor pin wait on x:TaoToken统一Key通道下的诊断配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 16:26:29

2026年厦门思明资质齐全的代理记账机构实力参考
2026年厦门思明资质齐全的代理记账机构实力参考

很多创业者和小微企业主在筹备初期,都会被工商登记、记账报税这些事务绊住脚步。不少人以为拿到营业执照就万事大吉,却不知道按时完成税务登记、规范账务处理、准确申报纳税是企业合法存续的基础。如果不熟悉厦门本地的政策口径和办事流程,很… · 2026/9/26 16:26:29

DeepSeek    LeetCode 107. 二叉树的层序遍历 II Rust实现
DeepSeek LeetCode 107. 二叉树的层序遍历 II Rust实现

LeetCode 107. 二叉树的层序遍历 II Rust 实现 思路 和 Python 版本一致&#xff1a;先用 BFS 自顶向下逐层收集&#xff0c;最后把结果整体反转&#xff0c;得到自底向上的层序遍历。 Rust 中需要处理 Option<Rc<RefCell>> 的所有权和借用问题&#xff0c;队列使用… · 2026/9/26 16:26:29

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介&#xff1a;万常选版《数据库原理与设计》课后习题答案资源&#xff0c;覆盖第2至6章及第9章&#xff0c;适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件&#xff0c;含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故&#xff0c;是很多团队绕不过去的坎。线上环境里&#xff0c;服务端明明已经上线了新版接口&#xff0c;老的移动端还在照着旧文档传参数。请求一到网关&#xff0c;校验直接拒绝&#xff0c;用户操作失败&#xff0c;客服群炸了锅&#xff0c;开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码