【问题标题】:Is there a way to skip type checking for faster TypeScript compilation?有没有办法跳过类型检查以加快 TypeScript 编译速度?
【发布时间】:2019-02-13 04:16:13
【问题描述】:
使用babel-preset-typescript 时,会跳过类型检查。这几乎肯定比使用普通 tsc 更快且内存占用更少,因为没有类型检查开销,并且完全跳过了绑定和检查步骤(它只是解析和剥离类型)。
我知道TS compiler API 不提供完全相同的功能,因为 babel 完全使用了不同的解析器(Ballyon)。但是有没有办法做类似的事情并跳过绑定和检查更快的编译?看起来ts.createProgram 自动包含类型检查。
【问题讨论】:
标签:
typescript
typescript-compiler-api
【解决方案1】:
你感兴趣的函数是ts.transpileModule(Source/Documentation)。
例如:
const compilerOptions: ts.CompilerOptions = {
// you'll probably want to load this from a tsconfig.json
target: ts.ScriptTarget.ES5,
module: ts.ModuleKind.CommonJS
};
const result = ts.transpileModule("const t = 5;", {
compilerOptions,
reportDiagnostics: false
});
console.log(result.outputText); // "var t = 5;"
因此,您需要遍历所有 typescript 文件路径,从磁盘读取它们,转译它们,然后将它们作为 js 文件全部写入文件系统。您也可以并行读取和写入文件系统(编译器同步执行此操作,因此异步执行此操作将提高性能)。
您可能已经注意到,ts.transpileModule 仍然会创建一个程序,但它仍然应该比常规进程快得多,因为它一次只知道一个文件的信息。要跳过创建程序,我认为需要使用内部 emitFiles 函数......尽管这需要实现内部 EmitResolver 类型以支持该场景,我不确定是否可以正确执行绑定(我不太了解,所以不能肯定)。