使用 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 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 API 创建 TypeScript 程序
- 使用访问器遍历 AST
- 自定义转换器与代码生成
- 构建简单的代码检查工具