本文假设读者对编译原理有一定了解,阅读完本文,你将学会使用Typescript来编译ts代码,以及配置编译选项
名词解释
- Program, Typescript应用程序,可以用来编译ts代码
CompilerHost,编译器宿主,用于连接Program与用户系统,暴露了一系列与操作系统无关的文件读写操作(本文暂不涉及)SourceFile,源文件,包含了源代码和Typescript AST(本文暂不涉及)
下面我们来实现一个精简版的tsc
Source: demo/test.ts
const app = () => {
console.log('hello world');
};
export { app };
main函数
import ts from 'typescript';
const program = ts.createProgram(['./demo/test.ts'], {});
program.emit();
执行
npx ts-node ./index.ts
Output: demo/test.js
"use strict";
exports.__esModule = true;
exports.app = void 0;
var app = function () {
console.log("hello world");
};
exports.app = app;
包含引用代码,仅仅三行代码即可使用Typescript来编译ts代码。
上面的例子createProgram
接受了两个参数,第一个是待编译的源代码,第二个是编译配置,我们可以通过一些配置来代码的生成es版本、输出路径等,这个参数类于tsconfig.json的作用。例如:
main函数
const program = ts.createProgram(['./demo/test.ts'], {
target: ts.ScriptTarget.ES5,
outDir: 'dist',
});
program.emit();
Output: dist/test.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.app = void 0;
var app = function () {
console.log('hello world');
};
exports.app = app;
当调用program.emit()
时才会去生成js代码(如果传入了noEmit
为true
则不会输出代码)
至此,你应该学会了如何使用Typescript去实现一个精简版
tsc
的命令,如有疑问🤔️,欢迎留言~