ts-morph 用于 TypeScript:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

ts-morph 简介:它是什么以及为什么需要它

\n\n

ts-morph 是一个用于以编程方式操作 TypeScript 抽象语法树(AST)的强大库。它提供了一个方便且直观的 API,用于分析、修改和生成 TypeScript 代码。与直接使用 TypeScript 编译器 API 不同,ts-morph 提供了更高级别的接口,大大简化了许多日常任务。

\n\n

为什么需要这个库?假设您需要:

\n
    \n
  • 代码重构: 自动重命名所有函数出现位置、更改方法签名或将类移动到另一个文件。
  • \n
  • 静态分析: 查找所有未使用的变量、检查企业编码规范的遵守情况或收集项目结构的元数据。
  • \n
  • 代码生成: 基于 JSON 模式创建类型、为数据库生成 CRUD 操作或自动添加文档。
  • \n
  • 创建开发者工具: 编写 linter 插件、自定义文档生成器或代码迁移工具。
  • \n
\n\n

ts-morph 抽象了 TypeScript 编译器 API 的复杂性,提供了面向对象的方法。您可以将项目、文件、类、函数和其他代码元素作为普通对象来处理,而不是处理底层的 AST 节点。

\n\n

安装 ts-morph

\n\n

通过 npm 或 yarn 安装该库。它作为 Node.js 的包提供。

\n\n
npm install ts-morph
\n\n

或者,如果您使用 yarn:

\n\n
yarn add ts-morph
\n\n

安装后,您可以将该库导入到您的项目中:

\n\n
import { Project } from 'ts-morph';
\n\n

ts-morph 需要 TypeScript(它被列为 peer dependency)。请确保您的项目中已安装 TypeScript:

\n\n
npm install typescript
\n\n

快速入门及代码示例

\n\n

让我们编写一个简单的脚本,创建一个新的 TypeScript 文件,向其中添加一个函数,然后输出生成的代码。

\n\n
import { 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\n

ts-morph 的主要方法和函数

\n\n

让我们看看库中 10 个关键方法,并附有详细描述和示例。

\n\n

1. Project.createSourceFile()

\n

功能: 在项目中创建一个新的 TypeScript 源文件。该文件可以为空或包含初始代码。

\n

参数:

\n
    \n
  • filePath: string — 文件路径(相对于项目根目录)。
  • \n
  • sourceText?: string — 文件的初始内容(可选)。

推荐