0Pricing
TypeScript Academy · 课时

使用 API 创建 TypeScript 程序

初始化编译器程序并访问类型检查器

使用 API 创建 TypeScript 程序 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 4 节课。

什么是编译器应用程序接口?

TypeScript 通过 typescript npm 软件包公开其编译器内部功能。您可以创建程序、检查类型检查器,并以编程方式分析源文件。

import ts from "typescript";
// Use ts.createProgram to start

安装 typescript 软件包

在工具中使用编译器应用程序接口时,请将 TypeScript 安装为常规依赖,而不仅仅是开发依赖。

npm install typescript
# Also install types if needed
npm install --save-dev @types/node

创建程序

ts.createProgram 接受入口文件路径数组和编译器选项,并返回一个 Program 对象。

import ts from "typescript";
const program = ts.createProgram(["src/index.ts"], {
  target: ts.ScriptTarget.ES2020,
  module: ts.ModuleKind.CommonJS,
  strict: true,
});

访问源文件

使用 program.getSourceFiles() 获取编译中的所有文件,或使用 getSourceFile 获取指定路径的文件。

const sourceFiles = program.getSourceFiles();
sourceFiles.forEach(sf => {
  if (!sf.isDeclarationFile) {
    console.log(sf.fileName);
  }
});

获取类型检查器

类型检查器是 TypeScript 分析的核心。请使用 program.getTypeChecker() 获取它。

const checker = program.getTypeChecker();
// Now use checker to resolve types, symbols, etc.

读取诊断信息

获取编译器诊断信息(错误和警告),以实现自定义验证工具。

const diagnostics = ts.getPreEmitDiagnostics(program);
diagnostics.forEach(d => {
  const msg = ts.flattenDiagnosticMessageText(d.messageText, "
");
  console.log(msg);
});

读取 tsconfig.json

使用 ts.readConfigFile 和 ts.parseJsonConfigFileContent 从 tsconfig 文件加载编译器选项。

const cfgFile = ts.readConfigFile("tsconfig.json", ts.sys.readFile);
const parsed = ts.parseJsonConfigFileContent(
  cfgFile.config,
  ts.sys,
  process.cwd()
);
const program2 = ts.createProgram(parsed.fileNames, parsed.options);

符号解析

类型检查器可以解析符号,即引用声明的名称,从而检查给定标识符所指向的内容。

const sf = program.getSourceFile("src/index.ts")!;
ts.forEachChild(sf, node => {
  if (ts.isVariableStatement(node)) {
    const symbol = checker.getSymbolAtLocation(
      node.declarationList.declarations[0].name
    );
    console.log(symbol?.getName());
  }
});

生成输出

调用 program.emit() 生成 JavaScript 和声明文件,就像运行 tsc 一样。

const emitResult = program.emit();
const exitCode = emitResult.emitSkipped ? 1 : 0;
process.exit(exitCode);

增量程序

使用 ts.createIncrementalProgram 复用之前的构建状态,从而加快重复分析。

// Incremental compilation tracks which files changed
// to avoid reprocessing unchanged files

回顾:编译器应用程序接口基础

TypeScript 编译器应用程序接口可以让您创建程序、检查源文件、通过检查器查询类型,并从 Node.js 代码生成 JavaScript。

快速检查

哪个方法可以从程序中返回 TypeScript 类型检查器?

您学到的内容

TypeScript 编译器应用程序接口从 ts.createProgram 开始。通过程序,您可以访问源文件、类型检查器和诊断信息,还可以生成输出;这些功能构成了构建代码检查器、代码生成器和分析工具的基础。

常见问题解答

「使用 API 创建 TypeScript 程序」课时是免费的吗?

是的 — 「使用 API 创建 TypeScript 程序」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 4 节课。

「使用 API 创建 TypeScript 程序」这节课中我会学到什么?

初始化编译器程序并访问类型检查器 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 TypeScript Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「使用 API 创建 TypeScript 程序」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 TypeScript Academy 课中编写并运行代码吗?

能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 API 创建 TypeScript 程序
  2. 使用访问器遍历 AST
  3. 自定义转换器与代码生成
  4. 构建简单的代码检查工具
← 返回 TypeScript Academy