96SEO 2026-07-25 00:38 2
这几年,前端圈子里关于 类型程序 的讨论从来没停过。大家熟知的 TypeScript几乎成了前端工程的“标配”。怎么说呢,但就在这个时候很多项目开始重新关注 JSDoc + TypeScript 推导 这种更轻量的方式。
是在 Svelte 官方宣布弃用 TypeScript,转而采用 JSDoc 之后很多人开始好奇:Svelte 为什么这么做?JSDoc 又能带来什么好处?我们如何在项目中用好 JSDoc?

很多人对 JSDoc 的第一印象。可能还停留在“写点注释,自动生成文档”的层面。确实最早的 JSDoc 工具就是用来做文档生成的。
但如今我们聊的 JSDoc,已经不再局限于文档。而是作为 TypeScript 官方支持的一套注释语法可以直接为 JavaScript 代码提供类型信息从而获得 IDE 智能提示、类型检查,甚至能在完全不引入 TS 的情况验到差不多开发体验。其实,至于来个实际案例,
这里定义了 size 类型为s|m|l,为size赋值时会有明显的代码提示,设置其他非枚举类型。vscode会直接提示:当然在idea也是支持的
接下来我们就通过几个案例,来看看 JSDoc 在实际开发中能发挥哪些作用,还有如何结合 TypeScript 的推导能力,帮助我们写出更安全、更高效的 JavaScript 代码。好问题 👍,很多团队做 纯 JS 项目 时不想迁移到 TS,但又想要「接近 TS 的智能提示」。这时候 JSDoc + TypeScript 类型推导 就能发挥作用。说起来,
要想获取到完整的jsdoc提示,你需要在项目jsconfig.json|tsconfig.json设置checkJs为true。比如下面这个例子:
{ "compilerOptions": { "paths": { "@/": },"checkJs": true,// 关键!话说回来,让 VSCode 分析 JS 里的 JSDoc "jsx": "preserve","jsxImportSource": "vue","allowJs": true。"types": },"exclude": }
这样 VSCode 会对 JS 文件里的 JSDoc 进行类型检查。
// @ts-check/** * @typedef {Object} User * @property {string} name * @property {number} age * @property {boolean} isAdmin *//** @type {User} */const user = { name: 'Tom',age: 18,isAdmin: false }user.name // ✅ string 提示user.age // ✅ number 提示user.isAdmin // ✅ boolean 提示
// 错误示例
user.xxx // ❌ 报错。没有这个属性
user.age = '18' // ❌ 类型错误,应为 number
/** @type {User} */const users = users.age // ✅ number 提示
// 错误示例
users.push // ❌ 类型错误,应为 User 对象
users.xxx // ❌ 属性不存在
/** * @param {number} x * @param {number} y * @returns {number} */function add {return x + y;}add // ✅ number 类型add // ❌ 参数类型错误
// 错误示例
const result = add // ❌ 返回值类型错误,影响后续操作
result.toFixed // ✅ 确保 result 是 number 才有 toFixed 方法
/** * @callback Comparator * @param {string} a * @param {string} b * @returns {number} *//** * @param {string} arr * @param {Comparator} compare */function sortStrings {
return arr.sort;}
sortStrings => a.length - b.length)
// ✅ a 和 b 自动推导为 string,且有类型检查
// 错误示例
sortStrings => a + b) // ❌ 返回值应为 number
sortStrings => num + b) // ❌ num 不是 string 类型
sortStrings => a - b) // ❌ 数组元素不是 string 类型
/** * @template T * @param {T} arr * @returns {T} */function first {
return arr;
说起来,}
first // ✅ 返回 number 类型 first // ✅ 返回 string 类型 first.id // ✅ id 为 number 类型
// 错误示例 first.xxx // ❌ 空数组调用 first 可能返回 undefined。应该处理边界情况或添加判断后再使用返回值属性。const value = first value.toFixed // ❌ value 是 string 类型,没有 toFixed 方法。first // ❌ 参数不是数组时会报错或返回错误结果。first // 同上,应该校验输入参数。
利用泛型可以实现非常灵活的类型推导。同时配合 TypeScript,可以获得强大的代码补全和校验能力。即使在纯 JavaScript 项目中。也可以这样得到接近 TypeScript 的开发体验,大大提高代码的可维护性与健壮性。不过,结合编辑器的智能提示。可以减少很多不必要的运行时错误,提高开发效率。
当然要想最大化发挥 JSDoc 的优势,还需要一些常用方法和工具链的支持。比如合理配置 tsconfig.json/jsconfig.json,利用编辑器插件提高代码补全和校验,甚至可以自定义一些代码片段或工具函数,进一步简化开发流程,提高团队协作效率。
在现代前端开发中,利用 JSDoc + TypeScript 推导的方式。不光可以帮助我们写出更安全、更高效的 JavaScript 代码,还能让我们的项目保持更好的灵活性与可 性,是值得尝试和推广的常用方法之一。
最终如果你还在犹豫是否要在项目中使用 JSDoc,不妨从简单的场景入手。比如先给关键函数添加类型注释,或者在公共组件/工具库中使用 JSDoc 来提供更好的 API 文档和类型约束。相信因为实践的深入,你会逐渐体会到它的价值所在!
希望这篇文章能帮助你更好地理解和应用 JSDoc,为你的前端开发带来更多便利!怎么说呢,😊
再比如说我们在封装一些通用逻辑的时候,可以通过jsdoc+ts type 来实现功能比较强的自动补全还有校验能力: 比如下面这个例子: /** * 从任意对象结构中提取指定 key 并返回新对象 * 支持通过泛型指定输入输出结构以获得完整类型推导和补全
示例的观点是,
pickDeep => 按嵌套方法提取深层字段
TODO的观点是,
lodash.get / ramda.path - 类似工具库的实现思路可以参考
主要难点 & 踩坑点:
* * 相关 Issue: * https://github.com/xxx/yyy/issues/123
* @category Object Utils @subcategory Data Transform
* @example js import pick from './pick'
const user = { name这方面,'John',address: { 再看city,'New York',zip: '10001' },contacts: { 从email来看,''。phone: '+11234567890' } }
// 简单提取顶层字段 const result1 = pick console.log // 输出:{ name: 'John' }
// 按方法提取深层字段 const result2 = pick console.log // 输出:{ city: 'New York',email: '' }
// 按方法提取并保留结构 const result3 = pickDeep console.log // 输出: // { // address: { // city: 'New York' // },// contacts: { // email: '' // } // }
// 错误用法演示 pick // 🚨 应为 string pick // ⚠️ 方法不存在的处理方式待调整
*/
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback