2025-02-17 ·
日常编程 ·
283509
typescript为javascript添加静态类型,有助于尽早发现错误并简化大型代码库的管理。但全面迁移到typescript有时难度很大。这时,jsdoc就派上用场了,它允许您在不进行全面重构的情况下,获得静态类型系统的大部分优势。
JSDoc的强大之处在于它不仅仅是代码注释。通过@typedef和@type,您可以在JavaScript文件中创建可复用的复杂类型定义,从而提升代码的可读性和安全性,而无需TypeScript的复杂配置。
JSDoc的适用场景:
小型项目: 对于小型项目,完整的TypeScript配置可能显得过于繁重。JSDoc提供了一种轻量级的添加类型和文档的方法。
逐步迁移: JSDoc可以作为迁移到TypeScript的桥梁。您可以先从JSDoc开始,生成声明文件,然后逐步过渡到完整的TypeScript。
已有JavaScript代码库: 将大型JavaScript代码库迁移到TypeScript可能非常耗时。JSDoc允许您逐步引入类型,无需一次性重写所有代码。
文档优先: JSDoc强调代码文档,这无论您使用哪种类型系统都是至关重要的。良好的文档始终是代码库的加分项。
使用@typedef和@type定义类型:
以下是如何使用JSDoc定义类型的示例:
/**
* @typedef {object} Point
* @property {number} x - x坐标.
* @property {number} y - y坐标.
*/
/**
* 计算两点之间的距离.
* @param {Point} p1 - 第一个点.
* @param {Point} p2 - 第二个点.
* @returns {number} 两点之间的距离.
*/
function distance(p1, p2) {
const dx = p2.x - p1.x;
const dy = p2.y - p1.y;
return Math.sqrt(dx ** 2 + dy ** 2);
}
/**
* @type {Point}
*/
const originPoint = { x: 0, y: 0 };
console.log(distance(originPoint, { x: 3, y: 4 }));
在这个例子中:
@typedef {object} Point: 定义了一个名为Point的类型,它是一个包含x和y属性的对象,这两个属性都是数字。
@param {Point} p1: 指定参数p1的类型为Point。
@param {Point} p2: 指定参数p2的类型为Point。
@type {Point}: 指定变量originPoint的类型为Point。
生成.d.ts文件:
JSDoc可以生成TypeScript声明文件(.d.ts)。TypeScript编译器(tsc)可以解析JSDoc注释并生成这些文件,这意味着您即使在编写纯JavaScript代码时,也能在IDE中进行类型检查和代码补全。
这是一个基本的tsconfig.json配置:
{
"compilerOptions": {
"target": "es2020",
"module": "commonjs",
"outDir": "./dist",
"declaration": true,
"allowJs": true,
"emitDeclarationOnly": false,
"esModuleInterop": true
},
"include": ["./src/**/*.js"],
"exclude": ["node_modules"]
}
运行npx tsc (或全局安装的tsc) 将在outDir目录下生成.d.ts文件。
总结:
JSDoc结合类型生成提供了一种平衡的方案。您可以获得类型安全和改进的文档,而无需承担完整的TypeScript迁移的成本。对于无法或不需要进行全面TypeScript迁移的项目,这是一种不错的选择,可以逐步引入类型并提升代码质量。 祝您编程愉快!
以上就是JSDOC:您向JavaScript添加类型的秘密武器(没有完整的打字稿大修)的详细内容,更多请关注骃骐网【www.myinqi.com】。
在快节奏的现代生活中,提升沟通效率是每个人的追求。无论是处理工作邮件、回复朋友信息,还是在社交媒体上分享生活,快速准确的打字显得尤为关键。作为苹果公司的最新产品,iphone14不仅具备强大的硬件性能,还内置了多种提高打字效率的功能。本文将揭示如何在iphone14上实现快速打字,让你的指尖在屏幕上飞舞。 使用智能键盘预测功能iphone14的智能键盘可以根据你的输入习惯和上下文预测下一个词或短语...
2025-05-07 · 百科知识 · 132572
在日常使用手机时,打字震动有时会带来一些不便,比如在安静的环境中影响他人,或者个人觉得震动过于频繁而不喜欢。那么,如何关闭手机打字震动呢?本文将为您详细解答。 不同手机系统的关闭方法 安卓系统 大多数安卓手机的打字震动设置大同小异。通常可以在手机的“设置”中找到相关选项。一般路径是:设置 - 声音与振动 - 触感反馈(或类似名称),在这里将其开关关闭,即可关闭打字震动。不同品牌手机可能会有细微差异...
2025-04-17 · 百科知识 · 45255
微软警告Outlook打字竟让CPU“爆表”,不少用户发现Win10 / Win11 经典版 Outlook 存 BUG,打字时 CPU 占用飙升至 50%,下面我们就来看看解决办法 微软近日示警 Windows 10、Windows 11 用户,经典版 Outlook 邮件客户端近期更新存在 BUG,用户打字过程中可能导致 CPU 占用率激增。 该问题最早可以追溯到 2024 年 11 月,有用...
2025-04-16 · 系统教程 · 52152
打字突然出现乱码,就像对话中突然冒出火星文,让人抓狂!无论是文档中的方块问号,还是输入法输出的乱码,都严重影响效率。别担心,本文将手把手教你解决打字乱码问题,从系统设置到硬件故障,轻松搞定! 打字乱码的常见原因: 乱码并非偶然,其背后隐藏着多种原因: 输入法故障: 输入法与软件编码不兼容,或输入法自身崩溃、版本过旧等。 系统设置错误: 系统语言与输入法不匹配,或缺少必要的字体文件。 软件兼容性问题...
2025-04-11 · 百科知识 · 102305
当你在电脑上打字时,发现选字框消失了,这可能是由于系统设置或软件问题导致的,下面我们就来看看详细解决办法 相信很多用户在使用WIn7系统时都遇到各种各样的问题,最近就有不少用户发现自己打字时没有选字框的情况,遇到这种问题bqc如何解决,其实方法非常简单,本文就给大家带来Win7系统打字没有选字框的解决方法吧! 操作方法: 1、首先,打开Win7系统的控制面板界面,找到“时钟、语言和区域...
2025-03-25 · 系统教程 · 298315
作为React开发者,我们都经历过管理props、状态或任何动态数据结构变得混乱的时刻。这时,TypeScript实用程序类型就闪亮登场了——它们是提升生产力的无名英雄!这些TypeScript的瑞士军刀通过对现有类型进行强大的转换,让我们的开发工作更轻松。让我们看看这些实用程序类型如何使您的React代码更简洁、更安全、更愉悦。 Partial:让所有属性可选 假设您正在构建一个组件,需要创建其...
使用vite和tailwind css 3.4.1构建react项目并集成shadcn ui组件 本文档指导您如何在不使用TypeScript的情况下,使用Vite构建一个React项目,并集成shadcn UI组件库。我们将使用Tailwind CSS 3.4.1版本,因为它与shadcn当前版本兼容性更好。 第一步:项目创建和Tailwind CSS安装 使用Vite创建一个新的React项目...
2025-02-17 · 日常编程 · 195148
如果您熟悉 JavaScript 和 TypeScript,可能习惯使用数组和对象(或字典)存储数据。但您是否尝试过使用 Map?Map 提供诸多优势,让您的代码更简洁、更高效、更灵活。 让我们深入探讨为何您应该使用 Map,它与数组和对象的差异,以及如何在 TypeScript 中有效利用它。 为什么使用 Map? Map 是一种特殊的数据结构,允许您像对象一样存储键值对。但它具备一些优势: 灵...
2025-02-10 · 日常编程 · 184034
TypeScript 是一种静态类型的 JavaScript 超集,它为 JavaScript 添加了类型系统。这种类型系统增强了代码的可读性、可维护性和可重用性,并在开发过程中尽早发现错误。 TypeScript 代码最终会被编译成 JavaScript 代码,可以在任何支持 JavaScript 的环境中运行。 基本类型 TypeScript 对数据类型进行了严格的检查。如果为变量赋予了不匹配...
2025-02-09 · 日常编程 · 37094
Feature JavaScript TypeScript Type System Dynamic (loosely typed) Static (strongly typed with optional types) Compilation Interpreted by browsers Compiled to JavaScript Error Checking Errors appear at...
2025-02-05 · 日常编程 · 174297