ts-morph 简介:它是什么以及为什么需要它
\n\nts-morph 是一个用于以编程方式操作 TypeScript 抽象语法树(AST)的强大库。它提供了一个方便且直观的 API,用于分析、修改和生成 TypeScript 代码。与直接使用 TypeScript 编译器 API 不同,ts-morph 提供了更高级别的接口,大大简化了许多日常任务。
\n\n为什么需要这个库?假设您需要:
\n- \n
- 代码重构: 自动重命名所有函数出现位置、更改方法签名或将类移动到另一个文件。 \n
- 静态分析: 查找所有未使用的变量、检查企业编码规范的遵守情况或收集项目结构的元数据。 \n
- 代码生成: 基于 JSON 模式创建类型、为数据库生成 CRUD 操作或自动添加文档。 \n
- 创建开发者工具: 编写 linter 插件、自定义文档生成器或代码迁移工具。 \n
ts-morph 抽象了 TypeScript 编译器 API 的复杂性,提供了面向对象的方法。您可以将项目、文件、类、函数和其他代码元素作为普通对象来处理,而不是处理底层的 AST 节点。
\n\n安装 ts-morph
\n\n通过 npm 或 yarn 安装该库。它作为 Node.js 的包提供。
\n\nnpm install ts-morph\n\n或者,如果您使用 yarn:
\n\nyarn add ts-morph\n\n安装后,您可以将该库导入到您的项目中:
\n\nimport { Project } from 'ts-morph';\n\nts-morph 需要 TypeScript(它被列为 peer dependency)。请确保您的项目中已安装 TypeScript:
\n\nnpm install typescript\n\n快速入门及代码示例
\n\n让我们编写一个简单的脚本,创建一个新的 TypeScript 文件,向其中添加一个函数,然后输出生成的代码。
\n\nimport { Project, SyntaxKind } from 'ts-morph';\n\n// 创建一个新项目\nconst project = new Project({\n useInMemoryFileSystem: true, // 在内存中工作,不保存到磁盘\n});\n\n// 创建一个新文件\nconst sourceFile = project.createSourceFile('example.ts', '');\n\n// 添加一个函数\nconst functionDeclaration = sourceFile.addFunction({\n name: 'greet',\n parameters: [{ name: 'name', type: 'string' }],\n returnType: 'string',\n statements: [\n `return \\`Hello, \\${name}!\\`;`,\n ],\n});\n\n// 添加 JSDoc 注释\nfunctionDeclaration.addJsDoc({\n description: '向用户打招呼',\n tags: [{ tagName: 'param', text: 'name - 用户名' }],\n});\n\n// 输出生成的代码\nconsole.log(sourceFile.getText());\n\n\n脚本执行结果:
\n\n/**\n * 向用户打招呼\n * @param name - 用户名\n */\nfunction greet(name: string): string {\n return `Hello, ${name}!`;\n}\n\n\n如您所见,我们以编程方式创建了一个带有 JSDoc 文档的完整函数。这只是 ts-morph 功能的一小部分。
\n\nts-morph 的主要方法和函数
\n\n让我们看看库中 10 个关键方法,并附有详细描述和示例。
\n\n1. Project.createSourceFile()
\n功能: 在项目中创建一个新的 TypeScript 源文件。该文件可以为空或包含初始代码。
\n参数:
\n- \n
filePath: string— 文件路径(相对于项目根目录)。 \n sourceText?: string— 文件的初始内容(可选)。